liquibase 的 changelog.xml 是定义数据库变更的核心 xml 文件,以 为根标签并声明命名空间,每个 需唯一标识(id+author),支持建表、加字段等操作,通过 和 保障安全与可维护性。

Liquibase 的 changelog.xml 是定义数据库变更的核心文件,它用 XML 描述一系列有序的数据库操作(如建表、加字段、改类型、插数据等),确保不同环境(开发、测试、生产)数据库结构一致且可追溯。
changelog.xml 基本结构和必需元素
一个合法的 changelog 文件必须以 <databasechangelog></databasechangelog> 根标签开始,并声明 Liquibase 命名空间。每个变更(changeSet)需有唯一标识(id + author 组合全局唯一),推荐加上 logicalFilePath 避免重命名导致重复执行。
-
<databasechangelog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"></databasechangelog>—— 必须声明命名空间 -
<changeset id="1" author="alice"></changeset>—— 每个 changeSet 必须含 id 和 author - 建议添加
logicalFilePath="changelog.xml"属性(写在根标签或 changeSet 内),用于校验文件路径变更 - changeSet 默认是原子执行的(失败则回滚),如需跳过回滚可加
runWith="sql"或设failOnError="false"(慎用)
常用 changeSet 类型写法示例
XML 中通过内置标签表达具体操作,无需手写 SQL(但支持 <sql></sql> 直接嵌入)。常见操作如下:
塑料卡板销售统计管理系统是一款对商品销售情况进行统一管理的系统。 程序特点1,简单,方便,网络操作,不受单台电脑文件保存限制2,纸质与数据库客户数据保存,查询变得更为方便3,免去久远的历史单据与数据查询烦恼4,方便的数据统计与自动核算功能5,丰富的销售数据录入与管理6, 销售清单(送货单)打印功能,支持条型码.7, 销售业绩提成统计功能8, 收款与未收款分开统计功能 后台地址:admin/logi
- 创建表:
<createtable tablename="user"><column name="id" type="BIGINT" autoincrement="true"></column></createtable> - 添加字段:
<addcolumn tablename="user"><column name="email" type="VARCHAR(255)"></column></addcolumn> - 修改字段类型:
<modifydatatype columnname="name" newdatatype="TEXT" tablename="user"></modifydatatype> - 插入初始数据:
<insert tablename="role"><column name="name" value="ADMIN"></column></insert> - 删除约束:
<dropforeignkeyconstraint basetablename="order" constraintname="fk_order_user_id"></dropforeignkeyconstraint>
如何保证变更安全与可维护性
实际项目中,仅写对语法不够,还需考虑执行顺序、重复执行、环境适配等问题:
- 用
<pre class="brush:php;toolbar:false;" conditions></pre>判断前置条件,例如“只在 PostgreSQL 上执行”或“表不存在时才建表”,避免报错中断 - 对可能重复执行的操作(如 insert),加上
runOnChange="true"或用<sqlcheck></sqlcheck>判断是否存在再执行 - 敏感变更(如 dropColumn)建议先用
failOnError="false"+ 日志提醒,上线前人工确认 - 把大 changelog 拆成多个子文件,用
<include file="v1.0/users.xml"></include>引入,便于团队协作和版本管理
配合 Liquibase CLI 或 Spring Boot 使用要点
文件写好后,需被 Liquibase 正确识别和执行:
- Spring Boot 项目中,将
changelog.xml放在src/main/resources/db/changelog/,并在application.yml中配置:spring.liquibase.change-log: classpath:/db/changelog/changelog.xml - 命令行执行时,确保
--changeLogFile指向正确路径,且数据库连接信息无误 - 首次运行会自动建
databasechangelog和databasechangeloglock表,后续所有变更都记录在前者中,不可手动删 - 若需回退,用
rollback命令(前提是每个 changeSet 都写了对应的<rollback></rollback>子标签)









