数据库迁移如何运作
最简单的方案是将Flyway指向空数据库。
它将尝试找到其架构历史表。由于数据库是空的,Flyway将找不到它并将 改为创建它。
现在,您现在有一个数据库,其中包含一个名为flyway_schema_history 的空表:
该表将用于跟踪数据库的状态。
紧接着,Flyway将开始扫描文件系统或应用程序的类路径以进行迁移。它们可以用Sql或Java编写。
然后根据版本号对迁移进行排序,并按顺序应用:
在应用每个迁移时,模式历史记录表会相应更新:
flyway_schema_history
installed_rank版描述类型脚本校验installed_byinstalled_on执行时间处理时间成功11初始设置SQLV1__Initial_Setup.sql1996767037阿克塞尔2016-02-04 22:23:00.0546真正22第一次变化SQLV2__First_Changes.sql1279644856阿克塞尔2016-02-06 09:18:00.0127真正
有了元数据和初始状态,我们现在可以讨论迁移到更新的版本。
Flyway将再次扫描文件系统或应用程序的类路径以进行迁移。将根据架构历史记录表检查迁移。如果它们的版本号低于或等于标记为当前版本的版本号,则会忽略它们。
剩余的迁移是待处理的迁移:可用,但未应用。
然后按版本号对它们进行排序并按顺序执行:
该模式历史表的更新,因此:
flyway_schema_history
installed_rank版描述类型脚本校验installed_byinstalled_on执行时间处理时间成功11初始设置SQLV1__Initial_Setup.sql1996767037阿克塞尔2016-02-04 22:23:00.0546真正22第一次变化SQLV2__First_Changes.sql1279644856阿克塞尔2016-02-06 09:18:00.0127真正32.1重构JDBCV2_1__Refactoring阿克塞尔2016-02-10 17:45:05.4251真正
就是这样!每当需要进化数据库时,无论是结构(DDL)还是参考数据(DML),只需创建一个版本号高于当前版本的新迁移。下一次Flyway启动时,它会找到它并相应地升级数据库。