mysql如何查詢重復(fù)數(shù)據(jù)并刪除
mysql查詢重復(fù)數(shù)據(jù)并刪除
表名: articles
內(nèi)容重復(fù)字段:title
準(zhǔn)備過(guò)程
Navicate 數(shù)據(jù)表導(dǎo)出sql,將導(dǎo)出dsql導(dǎo)入到本地測(cè)試庫(kù),查看title字段為varchar類(lèi)型且沒(méi)有索引,本地庫(kù)title設(shè)置title字段普通索引
(未設(shè)置索引的情況下sql查詢耗時(shí)太久,等了一分鐘都沒(méi)出結(jié)果)
Navicate執(zhí)行操作過(guò)程
1. 查詢標(biāo)題重復(fù)的數(shù)據(jù)量:
select count(*) from articles where title in (select title from articles group by title having count(*) > 1)
2. 查詢重復(fù)的數(shù)據(jù)量,排除主鍵id最小的重復(fù)記錄
select count(*) from articles where title in (select title from articles group by title having count(*) > 1) and id not in ( select min(id) from articles group by title having count(* )>1)
3. 查詢重復(fù)的數(shù)據(jù)的id,和 title
select id,title from articles where title in (select title from articles group by title having count(*) > 1) and id not in ( select min(id) from articles group by title having count(* )>1)
4. 查詢所有重復(fù)的記錄的id兵進(jìn)行字符串拼接,排除主鍵id最小的重復(fù)記錄
select GROUP_CONCAT(id) from articles where title in (select title from articles group by title having count(*) > 1 ) and id not in ( select min(id) from articles group by title having count(* )>1 )
5. 將第4步查詢出來(lái)的重復(fù)數(shù)據(jù)id拼接的字符串作為條件進(jìn)行數(shù)據(jù)刪除
delete from articles where id in (第4步查詢出的id字符串)
6. 檢查本地測(cè)試庫(kù)中article表內(nèi)重復(fù)數(shù)據(jù)已被刪除,將第5步的sql在線上執(zhí)行。第四步和第五步要多次執(zhí),因?yàn)镚ROUP_CONCAT 一次拼接的id 是有限的,可能沒(méi)有全部拼接出來(lái)
方法二:
該方法 title字段必須加索引,加索引的情況下,7W條數(shù)據(jù)刪除8K條執(zhí)行了49秒

DELETE FROM 表名稱 WHERE 重復(fù)字段名 IN ( SELECT tmpa.重復(fù)字段名 FROM ( SELECT 重復(fù)字段名 FROM 表名稱 GROUP BY 重復(fù)字段名 HAVING count(1) > 1 ) tmpa ) AND id NOT IN ( SELECT tmpb.minid FROM ( SELECT min(id) AS minid FROM 表名稱 GROUP BY 重復(fù)字段名 HAVING count(1) > 1 ) tmpb )
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL索引原理深度解析與優(yōu)化策略實(shí)戰(zhàn)方法
索引是存儲(chǔ)引擎用于快速查找記錄的一種數(shù)據(jù)結(jié)構(gòu),通常基于字段值構(gòu)建,能顯著降低查詢的時(shí)間復(fù)雜度,本文給大家介紹MySQL索引原理深度解析與優(yōu)化策略實(shí)戰(zhàn),感興趣的朋友一起看看吧2025-10-10
MySQL中JSON數(shù)據(jù)類(lèi)型的使用指南
在快速迭代的互聯(lián)網(wǎng)時(shí)代,數(shù)據(jù)已成為驅(qū)動(dòng)業(yè)務(wù)增長(zhǎng)和創(chuàng)新的核心要素,然而,隨著應(yīng)用場(chǎng)景的多樣化和復(fù)雜化,傳統(tǒng)固定表結(jié)構(gòu)常常成為開(kāi)發(fā)者的噩夢(mèng),在?MySQL?中使用?JSON?數(shù)據(jù)類(lèi)型,可以簡(jiǎn)化半結(jié)構(gòu)化或?qū)蛹?jí)數(shù)據(jù)的處理流程,本文小編給大家詳細(xì)說(shuō)說(shuō)2026-05-05
mysql查詢字段類(lèi)型為json時(shí)的兩種查詢方式
這篇文章主要介紹了mysql查詢字段類(lèi)型為json時(shí)的兩種查詢方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
MySQL5.6使用mysqldump數(shù)據(jù)備份的實(shí)現(xiàn)
本文主要介紹了MySQL5.6使用mysqldump數(shù)據(jù)備份的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-03-03
Windows系統(tǒng)下MySQL8.0.21安裝教程(圖文詳解)
這篇文章主要介紹了Windows系統(tǒng)下MySQL8.0.21安裝教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
MySQL 將文件導(dǎo)入數(shù)據(jù)庫(kù)(load data Statement)
本文主要介紹了MySQL 將文件導(dǎo)入數(shù)據(jù)庫(kù),可以使用load data infile語(yǔ)句將文件中的數(shù)據(jù)加載到數(shù)據(jù)庫(kù)中,感興趣的可以了解一下2024-09-09
利用SQL注入漏洞登錄后臺(tái)的實(shí)現(xiàn)方法
工作需要,得好好補(bǔ)習(xí)下關(guān)于WEB安全方面的相關(guān)知識(shí),故撰此文,權(quán)當(dāng)總結(jié),別無(wú)它意。讀這篇文章,我假設(shè)讀者有過(guò)寫(xiě)SQL語(yǔ)句的經(jīng)歷,或者能看得懂SQL語(yǔ)句2012-01-01

