写在前面
最近由于项目变更比较大,需要经常修改表结构,然后对应的测试,开发,生产环境数据库均要修改,有时候一不小心就忘记修改某个环境下的数据库了,
等出问题才发现表结构没有更新,如果项目还没上线,还可以把表删除了重新创建,但是如果项目已经上线了,就不能这样简单粗暴了,我们需要通过 SQL 脚本
在已有数据表的基础上进行升级。鉴于这种情况,于是决定寻找数据库版本控制工具。
在Java这部分,对数据库版本控制的主要有两个工具:
- Flyway
- Liquibase
两个工具各有千秋,但是核心功能都是数据库的版本管理,这里主要来看 Flyway。就像我们使用 Git 来管理代码版本一样,Flyway 可以用来管理数据库版本。
Flyway官网地址:https://flywaydb.org
1、Flyway是如何工作的
关于FlyWay工作原理,官网给出了具体的工作原理图。官网原理图地址:https://flywaydb.org/getstarted/how
这里简单记录一下,仅做备忘。
1.1 场景一:使用Flyway从无到有创建数据库
Flyway用'schema_version_history'数据表存放数据库schema的历史记录,跟踪数据库结构的变更;
由于刚开始数据库为空,Flyway找不到schema_version_history数据表,所以Flyway找不到它,就在数据库中创建了此表,
之后我们则需要在项目中定义Migration,通常用SQL或Java定义。
如下图所示,Flyway在运行时会顺序执行上图中的Migration1和Migration 2来实现对数据库的更新;同时'schema_version_history'表也会记录下这两次修改。
'schema_version_history'表记录修改历史。如下图所示: