当前位置: 首页 > 知识库问答 >
问题:

如何编写数据库迁移脚本?迁移脚本不工作

吕永寿
2023-03-14

我们有一个数据库,其中有一个名为Students的表,其中包含id、name、age和school列。

现在我想编写一个迁移脚本,将3列(假设我有数百万条记录)从Students表复制到New_Students表。

下面是我编写的示例脚本。这是一个错误

CREATE TABLE IF NOT EXISTS New_Students (
id PRIMARY KEY,
name string,
age string,
)

INSERT INTO New_Students(id,name,age)
SELECT  id,name,age
FROM students;

当在crateDb管理UI中执行上面的命令时,我得到下面的错误

SQLActionException[SQLParseException: line 8:1: mismatched input 'INSERT' expecting <EOF>]

以上语句在单独执行时有效。

问题:

  1. 为什么上面的多个语句不起作用,但是当单独键入时它起作用?2.如何将数据从表列复制到另一个新表。比方说我有几百万条记录,怎么做更有效率?

共有3个答案

鲜于阳
2023-03-14

>

  • 在单个请求中只有一条语句,正如你所说的,当你分开查询时,它是有效的,所以你确实需要执行两条语句。

    即使有上百万条记录,它仍然是一条语句,所以对效率不重要吗?您只需再运行一个单独的脚本来创建一个新表,插入将按预期工作,无论需要多长时间。

  • 岑熙云
    2023-03-14

    在创建表语句后放置分号

    CREATE TABLE IF NOT EXISTS New_Students (
    id int PRIMARY KEY,
    name varchar(100),
    age varchar(100) -- you need to remove this line coma as well 
    );
    
    INSERT INTO New_Students(id,name,age)
    SELECT  id,name,age
    FROM students;
    
    柯凯旋
    2023-03-14

    数据库AdminUI的SQL控制台不支持多个语句。

    您可以改用crashCLI工具,该工具支持多条语句,请参阅https://crate.io/docs/clients/crash/en/latest/.

     类似资料:
    • Phinx 使用迁移脚本来管理数据库。 每个迁移脚本都是一个 PHP 类。首选使用 Phinx API 来写迁移脚本,但是纯 SQL 语句也是支持的。

    • 我当前的项目有几个Flyway迁移,用于将初始数据导入数据库。这个数据是方便的,特别是对于开发人员能够快速设置项目。生产数据通过一些批处理作业导入,具有较新的版本。 其中有些迁移相当大(~20MB),因此每次应用程序启动时,Flyway都要花费一些时间来计算迁移的校验和。这也是集成测试的一个问题,因为它们也需要更长的时间。 null 我还有什么其他选择?如果可能的话,我希望使用Flyway而不是手

    • 创建迁移脚本 生成一个迁移脚本框架 让我们从创建一个新的 Phinx 迁移脚本开始。使用 create 命令: $ php vendor/bin/phinx create MyNewMigration 这将创建一个新的迁移脚本,格式是 YYYYMMDDHHMMSS_my_new_migration.php ,前14个字符是当前的timestamp,精确到秒。 如果你指定了多个脚本路径,将会提示你

    • 我用试用密钥尝试了State/BaselineMigration功能。https://flywaydb.org/documentation/concepts/baselinemigrationsFlyWay迁移执行脚本并正确移动到正确的版本。但在此基础上运行的所有迁移都失败了 从S开始2__xxx.sql然后它在版本2的模式表中创建一行并键入"SQL_STATE_SCRIPT" 再次执行flywa

    • 这一节介绍你可能遇到的在不同情况下如何分析和编写数据库迁移. 有关迁移的入门资料,请查看 the topic guide. 数据迁移和多数据库 在使用多个数据库时,需要解决是否针对某个特定数据库运行迁移。例如,你可能 只 想在某个特定数据库上运行迁移。 为此你可以在RunPython中通过查看schema_editor.connection.alias 属性来检查数据库连接别名: from dja

    • 数据库迁移工具 首先通过 composer 安装 composer require topthink/think-migration 注意事项,不支持修改文件配置目录 在命令行下运行查看帮助,可以看到新增的命令 php think migrate migrate:create Create a new migration migrate:rollback Rollback t