You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flyway中按顺序执行不同文件夹SQL脚本并保留历史记录的方法

解决Flyway同版本脚本执行顺序与历史保留问题

方案1:拆分版本号,区分DDL与DML

给DDL和DML脚本设置分层版本号,让Flyway按自然顺序执行:

  • DDL脚本使用 V1__xxx.sql、V2__xxx.sql 这类整数版本号
  • 对应版本的DML脚本使用 V1.1__xxx.sql、V2.1__xxx.sql 这类带小数的版本号
    这种方式下,Flyway会先执行所有整数版本的DDL脚本,再执行对应小数版本的DML脚本,完整保留所有执行历史,同时避免校验和冲突。

方案2:分阶段指定脚本目录+开启乱序执行

利用Flyway的locations配置分阶段指定脚本目录,结合outOfOrder参数允许同版本脚本补充执行(适用于Flyway 5.0+):

  1. 先执行DDL脚本:
    flyway -locations=filesystem:./DDL migrate
    
  2. 再执行DML脚本:
    flyway -locations=filesystem:./DML -outOfOrder=true migrate
    

该方法会将DDL和DML的执行记录全部保留在flyway_schema_history表中,无需清空历史。

方案3:合并同版本的DDL与DML脚本

将同版本号的DDL和DML内容合并到同一个脚本文件中,按先DDL后DML的顺序编写语句,一次性执行。这样既保证了执行顺序,又不会触发校验和不匹配的问题,执行历史也会完整记录。

错误原因说明:你遇到的校验和不匹配,是因为Flyway会根据脚本内容生成校验和并存储在flyway_schema_history表中,同版本号但内容不同的DDL、DML脚本,会被Flyway判定为同一版本脚本被篡改,从而触发校验失败。

内容的提问来源于stack exchange,提问作者Alex Ed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:45:43