当前位置: 首页 > 面试题库 >

在迁移中运行原始SQL

罗诚
2023-03-14
问题内容

我正在尝试使用任何语法,但无法考虑如何正确编写此代码:

Schema::table('users', function(Blueprint $table){
    $sql = <<<SQL
        ALTER TABLE 'users' MODIFY 'age' DATETIME
    SQL;
    DB::connection()->getPdo()->exec($sql);
});

也尝试过

DB::statement('ALTER TABLE \'users\' MODIFY COLUMN DATETIME);

和双引号等。运行迁移时,总是得到以下信息:

语法错误或访问冲突:1064您的SQL语法有错误。检查
与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的“用户”修改“年龄” DATETIME附近使用

是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下)。


问题答案:

使用反引号而不是单引号来转义MySQL中的标识符:

alter table `users` modify `age` datetime

在这种情况下,您可以完全忽略转义

alter table users modify age datetime


 类似资料:
  • 问题内容: 我在夹层中使用Django1.7。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中: 创建迁移会返回: 当我运行“迁移配置文件”时: 问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示: 我做错了什么? 问题答案: 在MySQL数据库中,从表中删除行。 删除迁移文件夹中的所有迁移文件。 重试并

  • 我试图运行mongock来处理版本控制的DB迁移,但mongock基础设施出现了一个异常,还请注意,我没有使用spring boot,只有spring bean系统,我没有选择使用spring boot。。。 Pom和代码段: 代码: Mongo模板按其应有的方式提供,但我遇到了以下抛出的错误,错误是从mongock而不是从我的变更集抛出的,它甚至不执行我的变更集。任何帮助都会很感激

  • 我可以强制Flyway在一个事务中运行所有尚未应用的迁移,而不是让每个迁移都是自己的事务吗? 在开发环境中这不是一个问题,但是在生产环境中,您可能会执行从一个更新到下一个更新的多个迁移,其中一个迁移失败将使数据库处于“半迁移”状态,其中一些迁移已提交,而一些未提交--这是一件非常糟糕的事情。 一种解决方法是简单地将所需的所有SQL塞进一个文件中,但这样做存在一些问题:

  • 已有项目 期望接入 Mpx,可根据项目或人力情况选择如何迁移,Mpx 不要求用户一次性用上框架的所有东西。 项目初始期:可以考虑一次性转为 Mpx,此时迁移成本比较低 项目成熟期:若人力有限,可选择逐步将原生小程序转为Mpx,而且 不需要对原有代码做全局重写。可参考此demo:Mpx渐进接入demo。 可以保持原有代码不变,新的组件、页面期望使用 Mpx 某些特性时才引入 Mpx。(推荐新模块引

  • 问题内容: 我用一些模型创建了一个新的应用程序,现在我发现一些模型没有经过深思熟虑。由于我尚未提交代码,因此明智的做法是将数据库迁移到最后的良好状态,并使用更好的模型重新进行迁移。在这种情况下,最后的良好状态是新应用程序不存在的数据库。 如何从Django 1.7的初始迁移迁移回去? 在一个可以这样做: 将从迁移历史记录中清除并删除的所有表。 如何在Django 1.7迁移中做到这一点? 问题答案

  • Django1.7引入了数据库迁移。 我知道忽略迁移可能是一个不好的做法,因为这部分代码将不会被测试。但事实并非如此:我在CI测试服务器(jenkins)中运行完整的迁移。我只想跳过本地测试中的迁移,因为速度很重要。 一些背景: 在Django1.6之前,在使用South时,我一直使用SOUTH_TESTS_MIGRATE设置: 可以使用--keepDB选项在测试运行之间保留测试数据库。这样做的好