Liquibase中如何为已创建的表添加组合唯一索引(YML格式)
为已存在表添加组合唯一索引的Liquibase YML配置
实操前置检查
- 执行索引创建前,必须先排查表A内是否存在(id, b_id)取值完全重复的存量数据,存在重复记录会直接导致索引创建失败;如果排查到重复值,需要先完成数据清理再执行变更,不要跳过检查直接运行。
- 提前和团队确认索引命名规则,保证索引名在当前库内全局唯一。
完整YML配置示例
直接在Liquibase的变更日志文件中追加对应changeSet即可,不需要修改原有建表逻辑:
databaseChangeLog: # 原有其他变更配置保持不变,在下方追加当前变更项 - changeSet: id: add_unique_index_on_A_table author: 你的开发署名 changes: - createIndex: # 索引名按团队规范调整即可,示例为表A的id+b_id组合唯一索引命名 indexName: uk_a_id_b_id tableName: A # 设为true即代表创建带唯一约束的索引 unique: true columns: - column: name: id - column: name: b_id
配置说明
- 该配置执行时,Liquibase会自动在目标数据库生成等价的原生创建索引语句:
CREATE UNIQUE INDEX uk_a_id_b_id ON A (id, b_id) - 组合索引内的列顺序要和业务查询习惯匹配,常作为查询过滤条件、区分度更高的列建议放在靠前位置,避免索引失效
- 索引名长度需要适配目标数据库的限制(如Oracle默认索引名长度上限为30字符,MySQL为64字符),避免创建报错
内容的提问来源于stack exchange,提问作者Nursultan
相关产品推荐
相关产品推荐

