liquibase的changelog详解
liquibase的changelog详解
⼆、changelog 详解
1.什么是changelog?
changelog 是 Liquibase 进⾏版本管理的核⼼⽂件。
官⽅介绍
The root of all Liquibase changes is the changelog file. Liquibase uses a changelog to list all changes, in order, made to your database. Think of it as a ledger. It is a file that contains a record of all your database changes (changesets).
Liquibase uses this changelog record to audit your database and execute any changes not yet applied to your
database.
hangelog 是 Liquibase 版本控制的核⼼,Liquibase 通过有序的 changelog 罗列你对数据库的更改,你可以把它想象成为⼀个账本,包含你对数据库所有操作的⽂件。
Liquibase 使⽤这个变更⽇志来审计你的数据库,并执⾏任何还没有应⽤到⽬标数据库的变更操作
简⽽⾔之就是⼀个⽇志⽂件,可以理解成 MySql 的 binlog 重做⽇志,Hadoop 的 NameNode ⽇志,提供重现步骤
2. changelog 的格式
Liquibase 提供的 changelog 格式有5种:
SQL
XML
JSON
YAML
Otherproperties是什么文件
其中建议使⽤的是 XML ,其次是 YAML,原因是可读性⾼。所以这⾥只讲XML和YAML
2.1.XML 格式
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="/xml/ns/dbchangelog"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:ext="/xml/ns/dbchangelog-ext"
xsi:schemaLocation="/xml/ns/dbchangelog /xml/ns/dbchangelog/dbchangelog-3.8.xsd /xml/ns/dbchangelog-ext /xml/ns/dbchangelog/dbchangelog-ext.xsd">
<preConditions>
<runningAs username="liquibase"/>
</preConditions>
<changeSet id="1" author="nvoxland">
<createTable tableName="person">
<column name="id" type="int" autoIncrement="true">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="firstname" type="varchar(50)"/>
<column name="lastname" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="state" type="char(2)"/>
</createTable>
</changeSet>
</databaseChangeLog>
2.2 YAML 格式
使⽤ JSON 需要下载: ,并加⼊到 classpath 中
databaseChangeLog:
- changeSet:
id: 1
author: nvoxland
changes:
-
createTable:
tableName: person
columns:
- column:
name: id
type: int
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: firstname
type: varchar(50)
- column:
name: lastname
type: varchar(50)
constraints:
nullable: false
- column:
name: state
type: char(2)
3.changelog 嵌套元素
python爬虫一单大概多少钱changelog 可⽤的嵌套元素共5类:
preConditions:执⾏ changelog 的前置条件;
property:⽤于设置属性的值;
changeSet:执⾏的变更集;
include:引⽤其他包含要执⾏的 changeSet ⽂件;
context:changSet 上下⽂;
这些嵌套元素将在编写 changelog 时详细说明,接下来,让我们写⼀个简单的 changelog ,完成我们的数据库升级
4、实战
1、优化
⾸先,我们可以从⼆-5中看到update,执⾏过程中,如果每次命令都需要加这么⼀堆参数就显得很繁琐,没关系,Liquibase提供了优化的⽅案。
我们可以通过内置的 liquibase.properties ⽂件,预定义我们的⼀些变量,如图:
# 版本控制主⽂件
sql.cj.jdbc.Driver
url:jdbc:mysql://localhost:3306/liquibase?useSSL=false
username:root
password:admin
# jdbc 驱动
classpath:./mysql-connector-java-8.0.11.jar
changeLogFile:./sql/l
这样在 liquibase.properties 同级⽬录下,直接执⾏ liquibase update liquibase rollbackCount 2即可。
就像这样
以下所以的实战默认已有properties⽂件,配置好了所有信息,并在同级⽬录下执⾏
2、⽬标数据库状态
创建表 user ,字段 id,name,age
添加初始化数据:(1,"张三",18),(2,"李四",19),(3,"王五",19)
3、使⽤命令
3.1.update
liquibase update
html5新增的属性llback
liquibase rollbackCount 2
4、编写changelog⽂件
空的changelog格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="/xml/ns/dbchangelog"
xmlns:xsi="/2001/XMLSchema-instance"
xmlns:ext="/xml/ns/dbchangelog-ext"
xmlns:pro="/xml/ns/pro"
xsi:schemaLocation="/xml/ns/dbchangelog /xml/ns/dbchangelog/dbchangelog-3.8.xsd /xml/ns/dbchangelog-ext /xml/ns/dbchangelog/dbchangelog-ext.xsd
/xml/ns/pro /xml/ns/pro/liquibase-pro-3.8.xsd ">
</databaseChangeLog>
vbs代码双选择5、添加changeSet
5.1.原⽣SQL格式
样例如下,分布执⾏两步,两个 changeSet,第⼀建表,第⼆步插⼊数据
是更新时使⽤的, 是回滚时使⽤的
<changeSet id="create-user" author="jiaotd">
<sql>
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
</sql>
<rollback>
<sql>
drop database `user`;
</sql>
</rollback>
<comment>创建user表</comment>
</changeSet>
jquery下载图片到本地<changeSet id="insert-user" author="jiaotd">
<sql>
insert into user values(1,"张三",18),(2,"李四",19),(3,"王五",19);
</sql>
<rollback>
<sql>
delete from user;
</sql>
</rollback>
<comment>创建user表</comment>
</changeSet>
执⾏update操作,显⽰Liquibase: Update has been successful.即代表成功。
可以看到,数据库多了3张表:DATABASECHANGELOG,DATABASECHANGELOGLOCK,user
其中 user 是我们⾃⼰定义的表,⽽剩下两张表则是 Liquibase 本⾝所需要的表。
打开 user 表,看⼀下我们的数据是否正确。
剩余的两张 Liquibase 的表,DATABASECHANGELOGLOCK 是Liquibase 在处理并发操作时⼀个锁表,正常情况下不⽤关
⼼,DATABASECHANGELOG 则是 Liquibase 对数据进⾏版本管理的核⼼,如图:
列描述在上⼀篇⽂章已经提到,这⾥就不再赘述,重点看DESCRIOTION,字段值是SQL,代表我们
使⽤了 SQL 格式的 changeSet。执⾏rollback命令后,就可以看到 user 表被删除,另外DATABASECHANGELOG处于清空状态。
5.2.SQLFile格式
⾸先我们先定义 update 与 rollback 执⾏的 SQL ⽂件
creat-user.sql
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into user values(1,"张三",18),(2,"李四",19),(3,"王五",19);
create-user-rollback.sql
drop table `user`;
然后,新建⼀个 l ⽂件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="/xml/ns/dbchangelog"
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/xml/ns/dbchangelog
/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
<changeSet id="init-user" author="jiaotd">
<sqlFile path="create-user.sql" relativeToChangelogFile="true"/>
<rollback>
<sqlFile path="create-user-rollback.sql" relativeToChangelogFile="true"/>
</rollback>
<comment>初始化user表</comment>
</changeSet>
</databaseChangeLog>2021最新版安装mysql教程
最后,执⾏update操作,同样可以实现刚才的效果,DATABASECHANGELOG 如图所⽰:
这⾥注意看 DESCRIOTION,值是 sqlFile,代表我们使⽤了 SQLFile 格式的 changeSet 。
5.3.原⽣XML标签格式
创建⼀个新的 changelog ⽂件,命名为 l,内容如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论