通义灵码如何写数据库迁移脚本 AI生成Liquibase配置
技术活儿要想干得漂亮,准备工作必须到位。用通义灵码自动生成Liquibase数据库迁移脚本,看着很酷,但AI再聪明也不是你肚子里的蛔虫。它需要你先交代清楚:数据库当前长什么样、你打算怎么改、以及项目里已有的那些Liquibase“潜规则”(比如changelog路径放哪、author字段用什么格式、要不要加preconditions)。这些信息不给全,生成的XML或YAML脚本要么根本跑不通,要么直接跟你的CI/CD流水线干起来。
所以,这件事拆开来看,核心就是三步走。
确认本地Liquibase基础配置
先翻翻你项目根目录下的liquibase.properties或application.yml,确认changeLogFile的路径是不是写对了(比如指向src/main/resources/db/changelog/db.changelog-master.yaml),以及url和username这些连接参数是否已经配好。这一步是地基,没这块,通义灵码连你把变更加在哪都不知道,生成的脚本只能是“无根浮萍”。
接着,在IDE里找到那个主changelog文件,右键选“Open in Terminal”,跑一下liquibase status --verbose,看看当前已经应用了多少个changeset。这一步决定了你新生成的id必须大于这个数,否则执行时就会报“duplicate key”的错误,别小看这一步。
向通义灵码提交精准提示词
轮到AI上场了。在通义灵码输入框里,乖乖贴上下面这段结构化提示,括号里的说明别偷懒省略:
「请生成一个Liquibase changeset,用于在MySQL 8.0环境下向user_profile表添加last_login_at DATETIME列,默认值为NULL,要求:① author字段填我的英文名zhangsan;② id按当前changelog末尾最大id+1递增(当前最大id是127);③ 使用YAML格式;④ 不带precondition;⑤ 变更类型为addColumn。」
这里的关键在于:id必须显式声明递增。Liquibase本身不校验id顺序,但CI/CD流水线通常依赖id单调递增来做diff。要是跳了号,流水线一看,“咦,中间有个变更没执行?”,结果就误判成未执行变更,最后够你折腾的。
校验并插入生成的changeset
通义灵码返回的YAML块通常以- changeSet:开头,直接复制整段内容,注意保留所有缩进。
打开db.changelog-master.yaml,滑到文件末尾,定位到最后一行- include:或- changeSet:之后,换行,粘贴新内容。YAML对缩进敏感这个老生常谈的问题,还是得再唠叨一句:id:和author:要顶格写,changes:缩进2空格,- addColumn:再缩进2空格。
有一点必须警惕:
生成内容里如果自动带了注释行(比如# This changeSet was generated by Tongyi Lingma),毫不犹豫删掉它。
#开头的行当注释,但某些旧版本(比如4.23.0以下)在YAML模式下遇到非标准注释时,会直接跳过整个changeSet,导致变更根本没被注册,你跑半天还不知道问题出在哪。保存文件后,在终端执行liquibase validate。如果输出Validation passed,那恭喜,语法无误;如果报unexpected end of stream,多半是粘贴时丢了空行或缩进错位,回去调一下就好。