文章插图
创建第一个项目表
为了预览到数据库有哪些更改,我们让LB生成对应的SQL文件 。
Liquibase—defaultsFile=liquibase_dev.properties updateSQL

文章插图
由Liquibase生成SQL文件
您可能注意到了,LB通过设置LOCKED = 1,来锁定DATABASECHANGELOGLOCK表 。也就是说,当您将脚本运行到DB时,列LOCKED被设置为1 。而当另一个用户同时运行LB时,Liquibase将为此等待,直到锁定被放开,再创建一个SHOES表,将日志的更改插入到DATABASECHANGELOG中,并从DATABASECHANGELOGLOCK表中释放掉已有的锁 。
如果一切正常,如下脚本会被执行到数据库中:
Liquibase—defaultsFile=liquibase_dev.properties update 接着,表SHOES会被创建出来 。
文章插图
我们也可以查询到谁、为何、以及何时创建了这张表 。

文章插图
跟踪包、视图等其他更改我们也可以如法创建其他脚本 。在此,我通过2个单独的文件,创建了一个SHOES_PKG包 。每个文件都是带有附加参数的唯一变更集,并被标记为Liquibase格式的SQL文件 。

文章插图
SHOES_BODY和SHOES_SPEC SQL文件
其中:
- runOnChange:true ——意味着每次更改包时,Liquibase都会针对数据库运行该变更集,也就是编译这个包 。
- stripComments:false ——意味着不要去除代码注释 。

文章插图
通过查看MD5SUM的列值可知,它是变更集的最后一次校验和 。也就是说,运行了updateSQL后,所有前期被“挂起”的更改都被执行,而且除了锁定LB表外,LB不会在SQL中生成任何内容 。

文章插图
运用updateSQL检查output_local.sql
现在,让我们改变SHOES_PKG本身,并保存该文件 。

文章插图
更新SHOES_PKG本身
那么该文件的校验和会发生变化,LB将再次编译这个包,并运行更新 。

文章插图
Liquidbase中的更新

文章插图
数据库中的更新
Liquibase将再次编译这个包,并使用DATABASECHANGELOG表中的实际DATEEXECUTED和新的MD5SUM等变更集,去更新相应的行 。
如何在现有软件项目中安装Liquibase?虽然我们好几种方法可以让Liquibase为现有的数据库实现自动化,但是我在此只向您展示最实用的两种 。您可以从中选择最适合实际需求的一种 。
当现有的项目中有很多对象时我们通过在项目的存储库中配置Liquibase,并保留所有文件的基础上,在master.xml文件中添加指向它们的路径 。具体而言,在实施Liquibase之前,我创建了2个过程和2个触发器:
P_ADD_JOB_HISTORY P_SECURE_DML TRG_SECURE_EMPLOYEES TRG_UPDATE_JOB_HISTORY 
文章插图
现有的P_ADD_JOB_HISTORY.sql文件
您并不需要将“changeset”或“–Liquibaseformatted sql”添加到文件中 。

文章插图
更新后master.xml中的文件路径
我在自己的master.xml中添加了一个指向PROCEDURES文件夹的路径 。
下面,让我们运行LiquibaseupdateSQL,并查看Liquibase会执行什么样的SQL:
Liquibase—defaultsFile=liquibase_dev.properties updateSQL 
文章插图
首次尝试更新SQL
既然我们的数据库中已经有了这些过程和触发器,我们就需要通过ChangelogSync和ChangelogSyncSQL命令,避免重复创建 。让我们运行ChangelogSyncSQL,并查看其结果 。
推荐阅读
- 一文带你搞定TCP连接队列
- SQLSERVER也能部署在linux环境?SQLServer2019在CENTOS7部署详解
- 微软|Win11中的祖传UI从Win9X流传至今!一文了解详情
- 一文看懂编程的本质,程序员有前途么?
- 一文掌握SQL基础
- 一文讲透 Python 协程
- 一文带你搞定TCP滑动窗口
- 2020考研英语试题及分数详解
- 详解:阳台可以摆放鞋柜吗
- 详解:你所不知的厕所风水知识
