flyway简单入门使用

2021-03-15

故事

好久没写博客了,最近自己放松了不少,想想还是应该坚持下去,毕竟是自己选择的路,今天为什么写flyway,因为目前flyway作为数据库迁移工具,确实很好用,目前应该也有很多公司采用flyway对数据库的sql版本进行管理。

我所在公司也是一样,虽然直接建表很方便,但是当项目进行多租户部署的时候,就会出现数据库错乱导致程序异常情况,除此之外,上线的系统也会涉及数据库的相关修改,这个时候,采用flyway对数据库版本进行管理。在方便自己的同时也方便别人。

flyway是什么

刚刚的一个故事可能很多人还没明白,flyway是什么。

通俗点说:flyway就是在对数据库进行操作时候的版本管理工具

采用flyway能够很好的对数据库版本进行响应管理,多人协同操作,也不会造成错乱现象。

如何使用

flyway是java环境中数据库版本控制工具之一,针对目前现状来说,常在spring系列框架中使用,接下来以springboot为例进行讲解。

在创建Spring项目,项目初始化时候选择flyway依赖

image.png

项目创建完后你会看见resources资源目录下会有db/migration目录,该目录用于存放sql文件。如下图所示。

image.png

同时你也会看见相关依赖

<dependency>
     <groupId>org.flywaydb</groupId>
     <artifactId>flyway-core</artifactId>
</dependency>

如果是已经生成的项目,后来需要加入flyway进行数据库版本管理,直接添加依赖,创建目录

截至目前依赖已经倒入,接下来就是配置yml配置文件

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flywaydemo
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

  flyway:
    enabled: true # 开启flyway
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 生产务必禁掉。这个默认值是 false 理论上作为默认配置是不科学的。
    clean-disabled: true
    locations: classpath:db/migration  #flyway文件目录
    table: flyway_schema_history  #历史表名
    baseline-on-migrate: true
    validate-on-migrate: true  #连续性校验
    baseline-version: 1 #指定默认版本
    encoding: UTF-8 #编码
    out-of-order: false # 是否允许不按顺序迁移 开发建议 true  生产建议 false
    sql-migration-prefix: V #前缀默认v
    sql-migration-separator: __ #分割符,默认__
    sql-migration-suffixes: .sql  #迁移文件,默认.sql


springboot在创建项目时导入了flyway,可以不配置yml,采用默认构建

然后就可以开始在db\migration目录下开始写sql脚本。大概内容如下:

image.png

这里需要说一下sql文件的命名方式

image.png

命名基本遵循以上三种方式,采用前缀+版本+描述+后缀构成

为什么会是这样呢?因为启动项目时候,flyway会在数据库中生成默认的版本记录表,大概是这样:

flyway默认生成的log表为:flyway_schema_history 也可以自己在yml文件中进行配置自定义表名

image.png

每当我们在db/migration目录下添加一个sql文件,启动项目后就会在flyway_schema_history表中添加一条记录,而记录的内容就是根据sql文件的命名进行添加的。

image.png

大概样子就是这样。其中version与description就是sql文件划分出来的

重点

1、sql的版本需要严格递增

例如上个一个版本是V1.0 那么下一个版本只能是V1.01 或者 V1.1.0 或者V 2.0.1之类的,因为flyway在启动时候会去flyway_schema_history检测是否有已存在的记录,如果有就不在执行,如果没有就执行然后添加记录,这时候版本的命名对我们的管理就会很方便。

这里推荐idea插件 Flyway Migration Creation

image.png

安装插件后,每次在创建.sql脚本时候,选中db/migration目录,然后右键new选择Flyway Migration然后选择第一个Versioned migration,然后只需要输入description就可以,他会自动根据当前时间创建version

image.png

  1. 在对.sql脚本进行添加时候,每次都需要新增,千万别去改以前的sql文件,否则会导致创建失败
  2. 项目执行60%的错误都解决办法都是去history记录表中删除你所添加的这个版本号的记录,然后重新执行,剩下20%是你sql写错了,还剩下20%问google吧

flyway常用功能

image.png

具体的以后再介绍吧,这里就入门以下就好了

flyway常用sql

  1. 创建表
CREATE TABLE `user` (
   `id` int(11) DEFAULT NULL,
   `name` varchar(255) DEFAULT NULL,
   `sex` varchar(255) DEFAULT NULL,
   `detail` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# 创建表
  1. 添加主键
ALTER TABLE `user`
    ADD CONSTRAINT PK_user PRIMARY KEY (id)

#添加主键
#ALTER TABLE `表名`  ADD CONSTRAINT PK_表名 PRIMARY KEY (字段名)

3.移除主键

Alter table `user` drop primary key

#Alter table 表名 drop primary key

4.添加主键自增

alter table  `user`  modify id int auto_increment primary key

# 主键自增
#alter table  tableName  modify id int auto_increment primary key

5.移除主键自增

alter table `user` modify id int(11),drop primary key;

#重置为普通列
#alter table class modify id int(11),drop primary key;


6.添加列

ALTER TABLE `user` ADD ppid bigint

# 添加列 ALTER TABLE `user` ADD ppid bigint

7.删除列

ALTER TABLE `user` DROP COLUMN ppid

#移除表中的列

8.改变列属性

alter table `user` modify column `sex` varchar(20) DEFAULT NULL

9.添加注释

ALTER TABLE `user` COMMENT '用户表';
ALTER TABLE `user` MODIFY COLUMN sex tinyint(1) COMMENT '性别';
#表注释
#ALTER TABLE userinfo COMMENT '用户信息资料表';

# 字段注释
#ALTER TABLE userinfo MODIFY COLUMN uname VARCHAR(40) COMMENT '姓名';

更多的相关东西参见官网doc

https://flywaydb.org/documentation/concepts/migrations

也可以去看看这个大佬的博客

https://blog.csdn.net/chenleiking/article/details/80691750

sql相关的语句可以去w3school里看看

https://www.w3school.com.cn/sql/sql_alter.asp

flyway的学习demo

flywaydemo.zip


标题:flyway简单入门使用
作者:sirwsl
地址:https://www.wslhome.top/articles/2021/03/15/1615739728147.html