- 迁移确保 subject NOT NULL DEFAULT '' 并建 (class_id,user_id,role_type,subject) 唯一索引 - 历史多科目值按内容拆分(不依赖列类型),首科目截断与 TS 侧 trim 归一化一致 - 破坏性清理前备份到审计表;暂存表自包含身份列,恢复不依赖原行存活 - 4 列兜底去重防 CREATE UNIQUE INDEX 撞 ER_DUP_ENTRY;GET_LOCK 串行化多实例迁移 - 收敛后启动为纯 no-op,滚动部署不再反复清理 - init.sql 与实体对齐:subject NOT NULL DEFAULT '',唯一索引显式命名