-- ====================================================================== -- prc_quote / prc_quote_fee 主键改 UUID 改造(VARCHAR(36)) -- -- 背景:测试大数据量场景下 UUID 主键的查询性能 -- 风险:会清空 prc_quote / prc_quote_fee 全部数据 -- 备份:quote_uuid_backup.sql(保留原始 schema) -- -- 关键顺序(踩坑总结): -- 1. DROP FOREIGN KEY -- 2. TRUNCATE TABLE -- 3. **先 MODIFY 列去掉 AUTO_INCREMENT**,再 DROP PRIMARY KEY -- 否则 InnoDB 报 1075「auto column must be defined as a key」 -- 4. 再 MODIFY quote_id 列 / ADD PRIMARY KEY -- 5. ADD FOREIGN KEY 时**会自动创建 quote_id 索引**,不要额外 ADD INDEX -- 否则报 1061「Duplicate key name」 -- -- 回滚:参考 quote_uuid_backup.sql,重建表结构即可 -- ====================================================================== -- === 1. 解除外键 === ALTER TABLE prc_quote_fee DROP FOREIGN KEY fk_quote_fee_quote; -- === 2. 清空数据 === TRUNCATE TABLE prc_quote_fee; TRUNCATE TABLE prc_quote; -- === 3. prc_quote: PK 改 UUID === -- 顺序很关键:先 MODIFY 列去掉 AUTO_INCREMENT ALTER TABLE prc_quote MODIFY quote_id VARCHAR(36) NOT NULL COMMENT '试算ID(UUID)'; ALTER TABLE prc_quote DROP PRIMARY KEY; ALTER TABLE prc_quote ADD PRIMARY KEY (quote_id); -- === 4. prc_quote_fee: PK 改 UUID; quote_id 列同步 === ALTER TABLE prc_quote_fee MODIFY fee_id VARCHAR(36) NOT NULL COMMENT '费用明细ID(UUID)'; ALTER TABLE prc_quote_fee DROP PRIMARY KEY; ALTER TABLE prc_quote_fee MODIFY quote_id VARCHAR(36) NOT NULL COMMENT '试算ID(UUID)'; ALTER TABLE prc_quote_fee ADD PRIMARY KEY (fee_id); -- === 5. 重建 FK(自动创建 idx_quote_fee_quote_id 索引,无需手动加) === ALTER TABLE prc_quote_fee ADD CONSTRAINT fk_quote_fee_quote FOREIGN KEY (quote_id) REFERENCES prc_quote (quote_id) ON DELETE CASCADE;