Liquibase

开始使用 SQL 脚本

第1步创建一个sql文件夹

在解压的Liquibase 的文件夹中 ,创建一个 sql 文件夹。在这个文件夹中你将放置 Liquibase将跟踪、版本和部署的SQL脚本。

第2步建立一个Change Log

这是一次性步骤,用于配置更改日志以指向将包含 SQL 脚本的 sql 文件夹。在解压的*.zip*.tar.gzLiquibase 的目录中创建并保存文件名为 myChangeLog.xml 的文件 。myChangeLog.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">

  <includeAll path="/sql"/>
</databaseChangeLog>

第3步在SQL文件中新增一个SQL脚本

使用教程设置中的 liquibase.properties 文件以及新创建的myChangeLog.xml,我们现在已准备好开始向 sql文件夹添加SQL脚本。Liquibase 将在文件夹中按字母数字顺序排列脚本。使用以下内容创建 001_create_person_table.sql 并将其保存在 sql文件夹中:

create table PERSON (
    ID int not null,
    FNAME varchar(100) not null
);

第4步 部署你的第一个修改

现在,我们已准备好部署我们的第一个脚本!打开终端,如果在 UNIX系统上则运行 ./liquibase update或 如果在 Windows 上则运行liquibase.bat update

第5步 检查你的数据库

您将看到您的数据库现在包含一个名为PERSON的表。要将作为本教程一部分的 H2 数据库写入内容,请打开一个终端,导航到您提取的 Liquibase``*.zip*.tar.gz的文件夹,并运行 java -jar h2-1.4.199.jar注意:输入您下载的 h2*.jar 的特定版本!输入JDBC URL、用户名和密码,从 liquibase.properties 文件输入您根据教程设置创建的属性文件。您会注意到还创建了另外两个表:databasechangeloglockdatabasechangeloglockdatabasechangelog表包含针对数据库运行的所有更改的列表。databasechangeloglock表用于确保两台计算机不会同时尝试修改数据库。

使用 Liquibase 函数入门

本教程使用Liquibase函数。更改将在 XML 中定义,而不是使用 SQLLiquibase 将根据定义的changeSet(s)生成 SQL,并将该 SQL 部署到目标数据库。所有迁移都在更改日志中显式跟踪和排序。

第一步创建一个Changelog文件

database changelog文件是列出所有数据库更改的位置。创建一个名为 myChangeLog.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">

</databaseChangeLog>

第2步 添加一个Change Set

每个changeSet都由id属性和author属性进行唯一标识。这两个标记以及更改日志文件的名称和包唯一地标识了更改。如果只需要指定一个id,则很容易意外重用它们,尤其是在处理多个开发人员和代码分支时。包括author属性可最大程度地减少重复的可能性。

将每个changeSet视为要应用于数据库的原子更改。通常最好在changeSet中只包含一个更改,但如果插入多个行时,这些行一起有作为单个事务添加的意义,则允许进行更多更改。Liquibase 将尝试将每个changeSet运行为单个事务,但对于某些命令,许多数据库将静默地提交和回滚事务(创建表、删除表等)。

<?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">

    <changeSet id="1" author="bob">
        <createTable tableName="department">
            <column name="id" type="int">
                <constraints primaryKey="true" nullable="false"/>
            </column>
            <column name="name" type="varchar(50)">
                <constraints nullable="false"/>
            </column>
            <column name="active" type="boolean" defaultValueBoolean="true"/>
        </createTable>
    </changeSet>

</databaseChangeLog>
  

第3步 运行change Set

如果是在UNIX操作系统,可以使用./liquibase update命令来执行myChangeLog.xml;如果是在Windows操作系统上,可以使用liquibase.bat update来运行myChangeLog.xml

检查你的数据库

您将看到您的数据库现在包含一个名为PERSON的表。要将作为本教程一部分的 H2 数据库入内容,请打开一个终端,导航到您提取的 Liquibase``*.zip*.tar.gz的文件夹,并运行 java -jar h2-1.4.199.jar注意:输入您下载的 h2*.jar 的特定版本!输入JDBC URL、用户名和密码,从 liquibase.properties 文件输入您根据教程设置创建的属性文件。您会注意到还创建了另外两个表:databasechangeloglockdatabasechangeloglockdatabasechangelog表包含针对数据库运行的所有更改的列表。databasechangeloglock表用于确保两台计算机不会同时尝试修改数据库。

标准模板

<?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">
    <property name="now" value="now()" dbms="mysql"/>

    <changeSet id="" author="修改者">
        <tagDatabase tag="数据库tag"/>
    </changeSet>

    <changeSet id="id唯一" author="修改者" runOnChange="false">
        <preConditions onFail="MARK_RAN">
            <not>
                <columnExists tableName="" columnName=""/>
            </not>
        </preConditions>
        <comment>此次修改的备注</comment>
        <sql>
        此次修改的sql语句
        </sql>
        <rollback>
            失败回滚的语句
        </rollback>
    </changeSet>

</databaseChangeLog>

changeSetid 为需求的日期加上 tag版本 和jiar版本

命令

在对应模块下执行
mvn install -Pupdatedb -Ddb.schema=数据库名称 -Dusername=root -Dpassword=数据库密码