MySQL對於有大量重複數據表的處理方法

需要在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 */


發佈了120 篇原創文章 · 獲贊 9 · 訪問量 57萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章