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

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

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


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

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

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

alter ignore table yourtablename add unique idx_name (test);

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

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

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

? ? ? ?

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

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

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

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

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

發(fā)表評(píng)論

change vcode