使用唯一索引方法刪除mysql重復記錄
作者: 鄭曉 分類: PHP 發(fā)布于: 2012-10-29 00:30 瀏覽:10,526 評論(1)
前兩天由于操作失誤,將線上的數(shù)據(jù)庫一表中插入了近六萬條的重復記錄,其中有用的數(shù)據(jù)也就幾千條。那幾萬 條的重復數(shù)據(jù)的刪除是個問題,因為整個表現(xiàn)在已經(jīng)有二十多萬的數(shù)據(jù),一開始使用兩個select 加group by來進行分組后刪除,不過語句執(zhí)行不了,一運行那mysql直接卡掉了…
不知為什么二十萬的數(shù)據(jù)就能直接把mysql給搞死。。。難道語句有問題?后來又試了下使用left join 更是坑爹。。。作為一個菜鳥,還是應該多問baidu和google。在網(wǎng)上找了個方法可以直接解決這些重復數(shù)據(jù)的刪除問題,雖然可能這個方法不是很好,但最起碼解決了我的問題。
方法是使用唯一索引這個功能,給重復的那個字段創(chuàng)建唯一索引來讓mysql自動刪除重復記錄,具體語句實例如下:
alter ignore table yourtablename add unique idx_name (test);
這里是給yourtablename表中的test字段創(chuàng)建唯一索引的語句,運行后會將test字段的值變成唯一,重復的數(shù)據(jù)都將會被刪除。
由于我是只刪除某一時段的數(shù)據(jù),所以我這里使用的是一個笨辦法,先將原表導出,將這個區(qū)間內(nèi)的所有insert記錄都剪貼出來導入本地庫中,然后執(zhí)行上面的語句創(chuàng)建唯一索引,執(zhí)行后將結(jié)果導出,把insert 的記錄語句重新貼回去,再導入線上庫中完成!
操作數(shù)據(jù)庫時切記進行備份??!
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應鏈接。
本文永久鏈接: http://yjfs.org.cn/unique-index-method-to-remove-mysql-duplicate-records.html
我每次遇到這問題,也采取這個措施,不過每次都寫一段java來執(zhí)行下。