数据库动态变化管理工具(Liquibase)学习

Liquibase 学习

      • 1)概述:
      • 2)基本使用

1)概述:

iquibase 是一个用于跟踪,管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据) 都保存在XML文件中,便于版本控制。

liquibase说白了就是一个将你的数据库脚本转化为xml格式保存起来,其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。

  • 目前支持多种数据库,包括Oracle/SqlServer/DB2/MySql/Sybase/PostgreSQL/Cache 等。
  • 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。
  • 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(changset),支持数据库变化的合并,因此支持多开发人员同时合作。
  • 在数据库中保存数据库修改历史(DatebaseChangeHistory),在数据库升级时自动跳过以应用的变化(ChangSet)。
  • 可生成数据库修改文档(HTML格式)。
  • 提供数据重构的独立的IDE 和 Eclipse插件。

2)基本使用

导入pom:


<dependency>
   <groupId>org.liquibasegroupId>
   <artifactId>liquibase-pluginartifactId>
   <version>1.9.5.0version>
dependency>

Liquibase编写规范:

  • Changset 的id使用【任务ID】+【日期】+【序号的方式】一般为了简单直接使用日期加序号即可,
  • 写上作者,为了以后更改时候确认功能
  • Liquibase禁止对业务数据进行操作
  • Liquibase禁止使用存储过程
  • Liquibase所有的表都加remarks注释
  • 已经执行的ChangeSet严禁修改
  • 不要随意的升级Liquibase的版本,不同的版本ChangeSet的MD5SUM的算法不一样

(1) 对当前数据库状态生成 changlog:

mvn liquibase:generateChangeLog

(2)只对数据生成 changelog ,(先用别的方式往数据库创建数据后再用此方式生成changelog)

mvn liquibase:generateChangeLog -Dliquibase.diffTypes=data

区别:前者是在changelog中追加表创建语句,生成建表语句和数据插入语句,如果表语句已存在,则只生成建表语句

xml代码:


<databaseChangeLog
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
    <property name="now" value="now()" dbms="h2"/>
    <property name="now" value="now()" dbms="mysql"/>
    <property name="autoIncrement" value="true"/>
    <property name="floatType" value="float4" dbms="postgresql, h2"/>
    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
    
    
    <changeSet id="202008211521-1" author="cxt">
        <createTable tableName="order_delivery" remarks="配送表">
            <column name="id" type="varchar(22)">
                <constraints primaryKey="true" nullable="false"/>
            column>
            <column name="order_id" type="varchar(22)" remarks="订单表ID">
                <constraints nullable="true"/>
            column>
            <column name="address" type="varchar(255)" remarks="地址">
                <constraints nullable="true"/>
            column>
            <column name="room" type="varchar(22)" remarks="门牌号">
                <constraints nullable="true"/>
            column>
            <column name="address_lng" type="double" remarks="地址经度">
                <constraints nullable="true"/>
            column>
            <column name="address_lat" type="double" remarks="地址纬度">
                <constraints nullable="true"/>
            column>
            ……
            <column name="lng" type="double" remarks="当前经度">
                <constraints nullable="true"/>
            column>
            <column name="lat" type="double" remarks="当前纬度">
                <constraints nullable="true"/>
            column>
            <column name="receiving_date" type="timestamp">
                <constraints nullable="true" />
            column>
            <column name="finish_date" type="timestamp">
                <constraints nullable="true" />
            column>
        createTable>
    changeSet>
	
    <changeSet id="202008211521-2" author="cxt">
        <dropColumn tableName="jhi_order" columnName="room"/>
        <dropColumn tableName="jhi_order" columnName="lng"/>
        <dropColumn tableName="jhi_order" columnName="delivery_deleted"/>
    changeSet>
databaseChangeLog>

每个里面互不影响,有其中的id号记录这段代码是否执行

也可以直接写SQL语句:


<databaseChangeLog
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd">
    <property name="now" value="now()" dbms="h2"/>
    <property name="now" value="now()" dbms="mysql"/>
    <property name="autoIncrement" value="true"/>
    <property name="floatType" value="float4" dbms="postgresql, h2"/>
    <property name="floatType" value="float" dbms="mysql, oracle, mssql"/>
    
	<changeSet id="202008211521-2" author="cxt">
        <sql>
           CREATE TABLE `order_delivery` (
            `id` varchar(22) COLLATE utf8_bin NOT NULL,
            `order_id` varchar(22) COLLATE utf8_bin DEFAULT NULL COMMENT '订单表ID',
            `address` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '地址',
            `room` varchar(22) COLLATE utf8_bin DEFAULT NULL COMMENT '门牌号',
            `address_lng` double DEFAULT NULL COMMENT '地址经度',
            `address_lat` double DEFAULT NULL COMMENT '地址纬度',
            …………
            `lng` double DEFAULT NULL COMMENT '当前经度',
            `lat` double DEFAULT NULL COMMENT '当前纬度',
            `receiving_date` timestamp NULL DEFAULT NULL,
            `finish_date` timestamp NULL DEFAULT NULL,
            PRIMARY KEY (`id`) USING BTREE
           ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC COMMENT='配送表'
        sql>
    changeSet>    
 databaseChangeLog>

详细使用可看:SpringBoot整合Liquibase

数据库动态变化管理工具(Liquibase)学习_第1张图片

你可能感兴趣的:(java,数据库,sqlserver,database)