當(dāng)前位置:博客首頁>>PHP >> 閱讀正文

使用唯一索引方法刪除mysql重復(fù)記錄

作者: 鄭曉 分類: PHP 發(fā)布于: 2012-10-29 00:30 瀏覽:10,329 評論(1)


前兩天由于操作失誤,將線上的數(shù)據(jù)庫一表中插入了近六萬條的重復(fù)記錄,其中有用的數(shù)據(jù)也就幾千條。那幾萬 條的重復(fù)數(shù)據(jù)的刪除是個問題,因為整個表現(xiàn)在已經(jīng)有二十多萬的數(shù)據(jù),一開始使用兩個select 加group by來進(jìn)行分組后刪除,不過語句執(zhí)行不了,一運(yùn)行那mysql直接卡掉了…

不知為什么二十萬的數(shù)據(jù)就能直接把mysql給搞死。。。難道語句有問題?后來又試了下使用left join 更是坑爹。。。作為一個菜鳥,還是應(yīng)該多問baidu和google。在網(wǎng)上找了個方法可以直接解決這些重復(fù)數(shù)據(jù)的刪除問題,雖然可能這個方法不是很好,但最起碼解決了我的問題。

方法是使用唯一索引這個功能,給重復(fù)的那個字段創(chuàng)建唯一索引來讓mysql自動刪除重復(fù)記錄,具體語句實例如下:

alter ignore table yourtablename add unique idx_name (test);

這里是給yourtablename表中的test字段創(chuàng)建唯一索引的語句,運(yùn)行后會將test字段的值變成唯一,重復(fù)的數(shù)據(jù)都將會被刪除。

由于我是只刪除某一時段的數(shù)據(jù),所以我這里使用的是一個笨辦法,先將原表導(dǎo)出,將這個區(qū)間內(nèi)的所有insert記錄都剪貼出來導(dǎo)入本地庫中,然后執(zhí)行上面的語句創(chuàng)建唯一索引,執(zhí)行后將結(jié)果導(dǎo)出,把insert 的記錄語句重新貼回去,再導(dǎo)入線上庫中完成!

操作數(shù)據(jù)庫時切記進(jìn)行備份??!

? ? ? ?

本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。

本文永久鏈接: http://www.yjfs.org.cn/unique-index-method-to-remove-mysql-duplicate-records.html

使用唯一索引方法刪除mysql重復(fù)記錄:目前有1 條留言

用戶評論頭像 月小升的技術(shù)博客發(fā)表于 2012年11月02日 12:20[回復(fù)]

我每次遇到這問題,也采取這個措施,不過每次都寫一段java來執(zhí)行下。

發(fā)表評論

change vcode