五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

關(guān)于MySQL 大批量插入時如何過濾掉重復數(shù)據(jù)

發(fā)布日期:2022-02-07 09:38 | 文章來源:CSDN

:

加班原因是上線,解決線上數(shù)據(jù)庫存在重復數(shù)據(jù)的問題,發(fā)現(xiàn)了程序的bug,很好解決,有點問題的是,修正線上的重復數(shù)據(jù)。

線上庫有6個表存在重復數(shù)據(jù),其中2個表比較大,一個96萬+、一個30萬+,因為之前處理過相同的問題,就直接拿來了上次的Python去重腳本,腳本很簡單,就是連接數(shù)據(jù)庫,查出來重復數(shù)據(jù),循環(huán)刪除。

emmmm,但是這個效率嘛,實在是太低了,1秒一條,重復數(shù)據(jù)大約2萬+,預估時間大約在8個小時左右。。。

盲目依靠前人的東西,而不去自己思考是有問題的!總?cè)ハ胫霸趺纯梢?,現(xiàn)在怎么不行了,這也是有問題的!我發(fā)現(xiàn),最近確實狀態(tài)不太對,失去了探索和求知的欲望,今天算是一個警醒,頗有迷途知返的感覺。

言歸正傳,下面詳細介紹去重步驟。

一、發(fā)現(xiàn)問題

CREATE TABLE `animal` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `name` varchar(20) DEFAULT NULL,  
  `age` int(11) DEFAULT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;  
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('1', 'cat', '12');  
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('2', 'dog', '13');  
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('3', 'camel', '25');  
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('4', 'cat', '32');  
INSERT INTO `pilipa_dds`.`student` (`id`, `name`, `age`) VALUES ('5', 'dog', '42'); 

目標:我們要去掉name相同的數(shù)據(jù)。

先看看哪些數(shù)據(jù)重復了

SELECT name,count( 1 )   
FROM  
 student   
GROUP BY  
NAME   
HAVING  
 count( 1 ) > 1; 

輸出:

name count(1) cat 2 dog 2

namecatdog的數(shù)據(jù)重復了,每個重復的數(shù)據(jù)有兩條;

Select * From 表 Where 重復字段 In (Select 重復字段 From 表 Group By 重復字段 Having Count(1)>1) 

二、刪除全部重復數(shù)據(jù),一條不留

直接刪除會報錯

DELETE   
FROM  
 student   
WHERE  
 NAME IN (  
 SELECT NAME   
 FROM  
  student   
 GROUP BY  
 NAME   
HAVING  
 count( 1 ) > 1) 

報錯:

1093 - You can't specify target table 'student' for update in FROM clause, Time: 0.016000s 

原因是:更新這個表的同時又查詢了這個表,查詢這個表的同時又去更新了這個表,可以理解為死鎖。mysql不支持這種更新查詢同一張表的操作

解決辦法:把要更新的幾列數(shù)據(jù)查詢出來做為一個第三方表,然后篩選更新。

DELETE   
FROM  
 student   
WHERE  
 NAME IN (  
 SELECT  
  t.NAME   
FROM  
 ( SELECT NAME FROM student GROUP BY NAME HAVING count( 1 ) > 1 ) t) 

三、刪除表中刪除重復數(shù)據(jù),僅保留一條

在刪除之前,我們可以先查一下,我們要刪除的重復數(shù)據(jù)是啥樣的

SELECT  
 *   
FROM  
 student   
WHERE  
 id NOT IN (  
 SELECT  
  t.id   
 FROM  
 ( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t   
 ) 

啥意思呢,就是先通過name分組,查出id最小的數(shù)據(jù),這些數(shù)據(jù)就是我們要留下的火種,那么再查詢出id不在這里面的,就是我們要刪除的重復數(shù)據(jù)。

四、開始刪除重復數(shù)據(jù),僅留一條

很簡單,剛才的select換成delete即可

DELETE   
FROM  
 student   
WHERE  
 id NOT IN (  
 SELECT  
  t.id   
 FROM  
 ( SELECT MIN( id ) AS id FROM student GROUP BY `name` ) t   
 ) 

90萬+的表執(zhí)行起來超級快。

到此這篇關(guān)于關(guān)于MySQL 大批量插入時如何過濾掉重復數(shù)據(jù)的文章就介紹到這了,更多相關(guān)MySQL過濾掉重復數(shù)據(jù)內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

美國快速服務器

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關(guān)注
微信

關(guān)注官方微信
頂部