一、Liquibase
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。
Liquibase具备如下特性:
* 不依赖于特定的数据库,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché等12种 数据库,这样在数据库的部署和升级环节可帮助应用系统支持多数据库。
* 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。
* 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此 支持多开发人员同时工作。
* 在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化 (ChangSet)。
* 提供变化应用的回滚功能,可按时间、数量或标签(tag)回滚已应用的变化。通过这种方式,开发人员可 轻易的还原数据库在任何时间点的状态。
* 可生成数据库修改文档(HTML格式)
* 提供数据重构的独立的IDE和Eclipse插件
二、使用在使用的过程中,Liquibase的作用就像是写好sql或者DML语句来完成数据库的更新,那么通俗些来说:将数据库schema的改变(table的创建、column的改变、index的改变......)以及数据本身内容的改变(insert 、 update 、 delete),用Liquibase定义的语法写成xml格式的=change log,同时也会在数据库中创建一张databasechangelog的table,用来记录db更新了那些change log,当xml新增更多的change log后,跟db里的版本比较,就可得知那些未同步的change log有哪些,下次同步时,就会同步这些未同步的change log,在这点上,Liquibase和现在大名鼎鼎的git很相似。
在这里需要注意一点:change log的文档,一旦同步过后,文档中对应的id以及文档路径等tag改变,那么文档中的改变就会当成新的change log,再次被同步到数据库中
三、使用
1、同步xml到db
(1) 创建table
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <!-- 建立 uesr table --> <changeSet id="create-user-table" author="kent"> <createTable tableName="user"> <column name="first_name" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="last_name" type="varchar(50)"> </column> </createTable> </changeSet> </databaseChangeLog>
如上操作即可完成 create table的操作 在结合maven使用时,执行mvn liquibase:update,db里面会产生三张table
databasechangelog是記錄同步用的,
databasechangeloglock是做locking的
user 則是上面的change log中的createTable建立的
其中前两个时liquibase管理,不需要管理,不过有兴趣的话 可以看下对应的表记录,就可以发现每次同步的操作都有记录
(2) update table
若是这个时候xml文档中添加如下的内容
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <!--省略前面的create table的操作--> <!-- 在user table加入 address column --> <changeSet id="addColumn-example" author="kent"> <addColumn catalogName="mydb" schemaName="public" tableName="user"> <column name="address" type="varchar(255)"/> </addColumn> </changeSet> </databaseChangeLog>
那么在此执行 mvn liquibase:update 后,user table就会多出新增的column。在这里需要注意点,由于create-user-table author="kent"前面被执行过来,同时对应的内容未发生改变,所以不会在此被执行。
(3) insert table
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <!-- insert兩筆測試資料 --> <changeSet id="insert-example" author="kent" > <insert catalogName="mydb" schemaName="public" tableName="user"> <column name="first_name" value="kent"/> <column name="last_name" value="chiu"/> </insert> <insert catalogName="mydb" schemaName="public" tableName="user"> <column name="first_name" value="cindy"/> <column name="last_name" value="chiu"/> </insert> </changeSet> </databaseChangeLog>
mvn liquibase:update 之后 数据库会增加两条记录
关于版本说明
在实际上,只要db的schema有做改变的,都是从xml进行改变,那么若是资料内容发生改变,则根据实际情况看要不要从change log改变。必要的预设资料可以在change log中进行设定。通过insert tag来建,减少每次重建table都要重新添加数据的步骤;同时也可结合其他指令,使数据库回到特定的版本,是不是和git很像
四、从数据库产生changelog.xml
对于现有的db,可以通过generateChangeLog从数据库中产生change log ,再以这个change log为基础,针对后续的改变,再通过liquibase管理(xml -- db);需要注意在通过generateChangeLog进行导出时,预设时只有schema(table/view/column/index/foreignkey/primarykey/uniqueconstraint),在产生数据时,不需要指定diffTypes参数,若是有其他的内容需要产生,则必须指定diffTypes参数
若是想只导出数据
diffTypes = data,只有数据,没有schema的信息;数据也可导出csv或者导入csv
只生成数据
mvn liquibase:generateChangeLog -Dliquibase.diffTypes=data
同时生产schema和datas
mvn liquibase:generateChangeLog -Dliquibase.diffTypes=tables,views,columns,indexs,foreignkeys,primarykeys,uniqueconstraints,data
----------------------------------------------------------------------------------
以上只是liquibase的简单描述,详情请见:http://www.liquibase.org/documentation/databasechangelog.html
相关推荐
liquibase API 使用 帮助文档 ,操作数据库, 更新,删除 插入
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...
com.svcdelivery.liquibase.eclipse.site-1.2.0.zip liquibase by eclipse的插件
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...
Liquibase mysql 版本管理插件 ,springboot 配置 Springcloud 配置
liquibase-3.1.1-bin.zip
主要介绍了SpringBoot整合liquibase的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...
LiquiBase数据库版本管理组件使用示例和详细介绍 1、语法简单,开箱即用 2、功能强大,满足日常数据库脚本变更需求 3、版本管理方便,每次修改都有记录 4、与项目集成,项目启动执行数据库变更,发布省去手动初始化...
liquibase-hibernate.zip,Hibernate集成的Liquibase扩展,包括基于更改的
liquibase-3.5.3-bin 工具,数据库跟踪,数据库更新,升级
可以运行的liquibase
Liquibase MongoDB扩展 目录 介绍 这是对MongoDB支持的Liquibase扩展。 结果是替代了现有的MongoDB演化工具。 它们中的大多数基本上是 shell方法的包装器, 方法从MongoDB 4.2开始不推荐使用。 为了调用特定于...
Liquibase扩展:无更改日志锁定逻辑此扩展禁止在运行changeSet时禁止所有更新DatabaseChangeLogLock表的调用。 那意味着没有: 创建数据库changeloglock表运行时调用“更新databasechangeloglock设置为已锁定= 1” ...
liquibase 生成工具
本文档适用于想要使用liquibase的小白,文档内容涵盖liquibase的详细操作
composite-ant.zip,蚂蚁+蚂蚁贡献者+撒克逊。蚂蚁+蚂蚁贡献者+撒克逊。
Liquibase Hibernate集成 这是一个用于连接 Hibernate 的 Liquibase 扩展。 该扩展允许您将 Hibernate 配置用作 Liquibase 中 diff、diffChangeLog 和 generateChangeLog 的比较数据库。配置扩展这些说明将帮助您在...
java运行依赖jar包
liquibase-slf4j 版本4.0.0 由马特·贝托利尼(Matt Bertolini)撰写 直接委托给SLF4J的Liquibase记录器的实现。 Liquibase有一个委托给java.util.logging的日志记录机制。 如果您使用jul-to-slf4j库,它就可以很...