本文译自Flyway官方文档,原文地址https://flywaydb.org/getstarted/how
当你最开始将FlyWay指向一个空数据库时。
它会试着去查找schema历史表,如果此时数据库是空的,则FlyWAY会自己创建一张历史表 。
你现在就有了个仅包含空表flyway_schema_history(默认)的数据库
这张表将会追踪数据库的状态,
随后flyway会立即扫描应用的文件系统或类路径(classpath)以用于迁移,Sql或Java文件都可以支持迁移。
迁移会按照版本号进行排序并依次执行:
随着每次迁移被执行,schema_history历史表会依此更新记录
flyway_schema_history
installed_rank |
version |
description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 22:23:00.0 |
546 |
true |
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 09:18:00.0 |
127 |
true |
现在,元数据与初始状态都已就位,可以讨论下迁移到新版本了
Flyway会再次扫描应用的文件系统和类路径,迁移依据历史表检查,如果版本号低于或等于当前版本号,则忽略迁移操作。
剩下的迁移是增量迁移(pending migrations),准备就绪,但未执行
它们会按照版本号排序并依次执行:
schema_history历史表会依此更新记录:
flyway_schema_history
installed_rank |
version |
Description |
type |
Script |
checksum |
installed_by |
installed_on |
execution_time |
success |
1 |
1 |
Initial Setup |
SQL |
V1__Initial_Setup.sql |
1996767037 |
axel |
2016-02-04 22:23:00.0 |
546 |
true |
2 |
2 |
First Changes |
SQL |
V2__First_Changes.sql |
1279644856 |
axel |
2016-02-06 09:18:00.0 |
127 |
true |
3 |
2.1 |
Refactoring |
JDBC |
V2_1__Refactoring |
axel |
2016-02-10 17:45:05.4 |
251 |
true |
That’s it! 每次数据库需要改进时,无论是DDL或DML,只要创建一个版本号高于目前版本的迁移就行,下次Flyway启动时,它会依次进行数据库的升级操作。
DDL: Data Definition Language 数据库定义语言
DML: Data Manipulation Language 数据库操作语言