- 概述
- 图示说明
- 代码实现
图示说明Flyway对数据库的所有更改都被称为migrations(迁移),migrations可以是版本化的或 可重复的。版本化migrations有两种形式:常规和撤消
基于sql
基于java
常规迁移(sql):有一个版本、一个描述、一个校验和,校验和用于检测意外更改
通常用于:
- 创建/更改/删除表/索引/外键/枚举/UDT/…
- 用户数据更正
- 数据更新
例如
CREATE TABLE `my_test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=111 DEFAULT CHARSET=utf8;
INSERT INTO my_test (name) VALUES ('DeLorean');
撤销迁移(sql):和常规迁移一样的版本号,用于撤销常规迁移(也就是常规迁移的逆向sql)
通常用于:
- 撤销同一版本的数据
例如
DELETe FROM my_test WHERe name='DeLorean';
可重复迁移:有描述和校验和,但没有版本,且不是只运行一次,而是每次校验和更改时应用他们
通常用于:
- (重新)创建视图/过程/函数/包/…
- 批量引用数据重新插入
例如
CREATE OR REPLACe VIEW blue_cars AS
SELECT id, license_plate FROM cars WHERe color='blue';
代码实现
1、导入maven
org.flywaydb
flyway-core
5.2.4
com.baomidou
mybatis-plus-boot-starter
3.4.2
mysql
mysql-connector-java
8.0.17
2、application.yml配置
server:
port: 31001
spring:
datasource:
password: root
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/novel_cloud?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=true
flyway:
baseline-on-migrate: true # 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
enabled: true # 是否启用flyway
locations: classpath:db/migration # 迁移sql脚本文件存放路径,默认db/migration
sql-migration-prefix: V # 迁移sql脚本文件名称的前缀,默认V
sql-migration-separator: __ # 迁移sql脚本文件名称的分隔符,默认2个下划线__
sql-migration-suffixes: .sql # 迁移sql脚本文件名称的后缀
validate-on-migrate: true # 迁移时是否进行校验,默认true
3、创建resources/db/migration文件夹
启动项目查看结果
文件被创建



