LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:

  • 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
  • 支持多开发者的协作维护;
  • 日志文件支持多种格式,如XML, YAML, JSON, SQL等;
  • 支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。

这里主要介绍xml文件中changeSet中操作数据库的写法。更多内容见官方文档

一、常见操作

1.创建表

<property name="now" value="now()" dbms="mysql,h2"/>
<property name="now" value="current_timestamp" dbms="postgresql"/>
<property name="now" value="sysdate" dbms="oracle"/>

<changeSet  id="20190716-test-001" author="fxg">
	<comment>创建表</comment>
	<createTable  tableName="person" remarks="人员表" >
		<column name="id" type="number(20)" remarks="id">
			<constraints primaryKey="true"/>
            	</column>
		<column name="created" type="timestamp" defaultValueDate="${now}" remarks="创建时间">
			<constraints nullable="false"/>
            	</column> 
		<column name="nationId" type="number(12)" remarks="国家id">
			<constraints referencedColumnNames="nationId" referencedTableName="nation" foreignKeyName="fk_person_nationId"/>
		</column>
        	<column name="address" type="varchar(255)" remarks="地址"/>
	</createTable>
</changeSet>

2.删除表

<changeSet  id="20190716-test-002" author="fxg">
	<comment>删除表</comment>
	<dropTable tableName="person"/>
</changeSet>

3.添加列

<changeSet  id="20190716-test-003" author="fxg">
	<comment>添加列</comment>
	<addColumn tableName="person">
       		<column name="address" type="varchar(255)"/>
	</addColumn>
</changeSet>

4.删除列

<changeSet  id="20190716-test-004" author="fxg">
	<comment>删除列</comment>
	<dropColumn tableName="person" columnName="id"/>
</changeSet>

5.更新列

<changeSet  id="20190716-test-005" author="fxg">
	<comment>更新列</comment>
	<renameColumn tableName="person" oldColumnName="id" newColumnName="id" columnDataType="int" remarks="id"/>
</changeSet>

6.创建视图

<changeSet  id="20190722-test-001" author="fxg">
	<comment>创建视图</comment>
	 <createView fullDefinition="true" viewName="VIEW_XXX" remarks="XXX视图">
		CREATE OR REPLACE FORCE VIEW VIEW_XXX("ID","NAME")
		AS  
		SELECT t.ID,t.NAME FROM "PEOPLE" T
	</createView>
</changeSet>

二、其他

column常用属性

属性描述
name列的名称
type列数据类型。为了使脚本与数据库无关,
以下“通用”数据类型将转换为正确的数据库实现:
BOOLEAN、CURRENCY(货币)、UUID、 CLOB、BLOB、
DATE(日期)、DATETIME(日期时间)、TIME(时间)、BIGINT
remarks列注释
defaultValue列的默认值
defaultValueNumeric列的默认数值
defaultValueBoolean列的默认布尔值
defaultValueDate默认日期和/或时间值。该值以下列形式之一指定:
"YYYY-MM-DD","hh🇲🇲ss"或"YYYY-MM-DDThh:mm:ss"
autoIncrement是否自动增量。在不支持自动增量/标识功能的数据库上忽略。

column可用的子标签:constraints(约束定义)

constraints可用属性

属性描述
nullable可否为空
primaryKey是否为主键
primaryKeyName主键名称
unique是否为唯一键
uniqueConstraintName唯一键名称
references外键定义
foreignKeyName外键名称
deleteCascade设置删除级联
deferrable约束是否可以推迟
initiallyDeferred约束最初是否推迟

标题:liquibase中changeSet常用的子标签(数据库操作)
作者:xingzhegu
地址:https://www.fxg.life/articles/2019/07/16/1563250001938.html