需要在MySQL的一張innodb引擎的表(tableA)上添加一個唯一索引(idx_col1_u)。但是對於每個key(col1)表中已經有大量重複數據。此時,做數據的手工清理,或者SQL處理是非常耗時的。
MySQL有一個獨有的 alter ignore add unique index的語法。
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
行爲類似於insert ignore,即遇到衝突的unique數據則直接拋棄而不報錯。對於加唯一索引的情況來說就是建一張空表,然後加上唯一索引,將老數據用insert ignore語法插入到新表中,遇到衝突則拋棄數據。
點:alter ignore的語法不支持innodb,所以需要把table的引擎改爲MyISAM;
解決方案
ALTER TABLE tableA ENGINE MyISAM; /*注意:修改表結構爲MyISAM */
ALTER IGNORE TABLE tableA ADD UNIQUE INDEX idx_col1_u (col1); /*添加唯一索引,消重*/
ALTER TABLE table ENGINE InnoDB; /*可選,修改表結構爲InnoDB */