iquibase 是一个用于跟踪,管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据) 都保存在XML文件中,便于版本控制。
liquibase说白了就是一个将你的数据库脚本转化为xml格式保存起来,其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。
导入pom:
<dependency>
<groupId>org.liquibasegroupId>
<artifactId>liquibase-pluginartifactId>
<version>1.9.5.0version>
dependency>
Liquibase编写规范:
(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