41 lines
1.9 KiB
SQL
41 lines
1.9 KiB
SQL
-- ======================================================================
|
||
-- 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; |