`
dalan_123
  • 浏览: 83708 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Liquibase

阅读更多

一、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=&quot;kent&quot;前面被执行过来,同时对应的内容未发生改变,所以不会在此被执行。

  (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 API 使用 帮助文档 ,操作数据库, 更新,删除 插入

    liquibase-3.4.2-bin.zip(Nov 24, 2015)

    Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...

    liquibase plugin for eclipse

    com.svcdelivery.liquibase.eclipse.site-1.2.0.zip liquibase by eclipse的插件

    Liquibase 3.4.2

    Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...

    Liquibase mysql 版本管理插件

    Liquibase mysql 版本管理插件 ,springboot 配置 Springcloud 配置

    liquibase-3.1.1-bin.zip

    liquibase-3.1.1-bin.zip

    SpringBoot整合liquibase的实现方法

    主要介绍了SpringBoot整合liquibase的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Liquibase 3.3.3 bin

    Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。 Liquibase具备如下特性: * 不依赖于特定的数据库,目前支持...

    LiquiBase数据库版本管理组件使用示例

    LiquiBase数据库版本管理组件使用示例和详细介绍 1、语法简单,开箱即用 2、功能强大,满足日常数据库脚本变更需求 3、版本管理方便,每次修改都有记录 4、与项目集成,项目启动执行数据库变更,发布省去手动初始化...

    liquibase-modify-column-3.1.zip

    liquibase-hibernate.zip,Hibernate集成的Liquibase扩展,包括基于更改的

    liquibase-3.5.3-bin

    liquibase-3.5.3-bin 工具,数据库跟踪,数据库更新,升级

    liquibase.rar

    可以运行的liquibase

    liquibase-mongodb:Liquibase的MongoDB扩展

    Liquibase MongoDB扩展 目录 介绍 这是对MongoDB支持的Liquibase扩展。 结果是替代了现有的MongoDB演化工具。 它们中的大多数基本上是 shell方法的包装器, 方法从MongoDB 4.2开始不推荐使用。 为了调用特定于...

    liquibase-nochangeloglock:禁用Liquibase用于确保一次仅针对数据库运行一个实例的锁定逻辑。 一般不建议使用,但有时会有所帮助

    Liquibase扩展:无更改日志锁定逻辑此扩展禁止在运行changeSet时禁止所有更新DatabaseChangeLogLock表的调用。 那意味着没有: 创建数据库changeloglock表运行时调用“更新databasechangeloglock设置为已锁定= 1” ...

    liquibase-4.2.0.rar

    liquibase 生成工具

    独家liquibase操作手册.rar

    本文档适用于想要使用liquibase的小白,文档内容涵盖liquibase的详细操作

    composite-liquibase-1.4.zip

    composite-ant.zip,蚂蚁+蚂蚁贡献者+撒克逊。蚂蚁+蚂蚁贡献者+撒克逊。

    liquibase-hibernate:Liquibase Hibernate集成

    Liquibase Hibernate集成 这是一个用于连接 Hibernate 的 Liquibase 扩展。 该扩展允许您将 Hibernate 配置用作 Liquibase 中 diff、diffChangeLog 和 generateChangeLog 的比较数据库。配置扩展这些说明将帮助您在...

    liquibase-core-3.6.3.jar

    java运行依赖jar包

    liquibase-slf4j:Liquibase SLF4J记录仪

    liquibase-slf4j 版本4.0.0 由马特·贝托利尼(Matt Bertolini)撰写 直接委托给SLF4J的Liquibase记录器的实现。 Liquibase有一个委托给java.util.logging的日志记录机制。 如果您使用jul-to-slf4j库,它就可以很...

Global site tag (gtag.js) - Google Analytics