The Liquibase
differentiate between multiple ChangeSet
by calculating the MD5 checksome
of a ChangeSet
by combining filepath::id::author
parameters of ChangeSet
. this MD5 checksome
serves as the unique identifier
for the ChangeSet
and helps Liquibase
determine which ChangeSet
has already been executed before. Liquibase
saves these MD5 checksome
in DATABASECHANGELOG
table as well for future reference.
Liquibase
provides calculateChecksum
command which recalculate
and print the MD5 checksome
for the ChangeSet
of ChangeLog file
.
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:pro="http://www.liquibase.org/xml/ns/pro" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
<changeSet author="wesome" id="1697962298531-1">
<createTable catalogName="appledb" tableName="apple">
<column autoIncrement="true" name="apple_id" type="BIGINT">
<constraints nullable="false" primaryKey="true" />
</column>
<column name="apple_name" type="VARCHAR(255)">
<constraints unique="true" />
</column>
<column name="available" type="CHAR(1)" />
<column defaultValueComputed="CURRENT_TIMESTAMP" name="current_date_time" type="datetime" />
</createTable>
</changeSet>
<changeSet author="wesome" id="1697962298531-2">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="1" />
<column name="apple_name" value="Macintosh" />
<column name="available" value="Y" />
<column name="current_date_time" valueDate="now()" />
</insert>
</changeSet>
<changeSet author="wesome" id="1697962298531-3">
<insert catalogName="appledb" tableName="apple">
<column name="apple_id" valueNumeric="2" />
<column name="apple_name" value="Fuji" />
<column name="available" value="Y" />
<column name="current_date_time" valueDate="now()" />
</insert>
</changeSet>
</databaseChangeLog>
liquibase.properties (update changeLog File file format with SQL, XML, YAML, JSON as per changelog.mysql.)
changeLogFile=changelog.mysql.xml
liquibase.command.url:jdbc:mysql://localhost:3306/appleDb?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
liquibase.command.username : root
liquibase.command.password : rootroot
Run command
liquibase calculate-checksum --changeset-identifier=changelog.mysql.xml::1697962298531-1::wesome
Liquibase will recalculate and print the MD5 Checksum for ChangeSet id="1697962298531-1", same can be verified in DATABASECHANGELOG
table by executing the command
select * from appleDb.DATABASECHANGELOG where ID="1697962298531-1";