-- 修复用户模板表的唯一约束问题 -- 解决逻辑删除与唯一约束的冲突 -- 1. 删除原有的唯一约束 ALTER TABLE `user_template` DROP INDEX `uk_user_template_name`; -- 2. 创建条件唯一索引,只对未删除的记录生效 -- MySQL 5.7+ 支持函数索引,但为了兼容性,我们使用另一种方案 -- 创建一个复合索引,对于已删除的记录,使用 NULL 值来避免唯一约束 ALTER TABLE `user_template` ADD UNIQUE INDEX `uk_user_template_name_active` (`user_id`, `template_name`, (CASE WHEN deleted = 0 THEN 0 ELSE NULL END)); -- 注意:这个索引允许以下情况: -- - 用户A有模板"test1",deleted=0(正常)- 唯一 -- - 用户A有多个模板"test1",deleted=1(已删除)- 允许多个 -- 但不允许: -- - 用户A有两个模板"test1",都是deleted=0