mysql數(shù)據(jù)表中有多條重復數(shù)據(jù)記錄,現(xiàn)在想刪除刪除部分重復數(shù)據(jù),保留最后一條更新或者插入的數(shù)據(jù)。
成都創(chuàng)新互聯(lián)公司主營延安網站建設的網絡公司,主營網站建設方案,成都app軟件開發(fā),延安h5重慶小程序開發(fā)公司搭建,延安網站營銷推廣歡迎延安等地區(qū)企業(yè)咨詢
以學生表為例,我們創(chuàng)建一個簡單的數(shù)據(jù)表來做實驗:
往表里面插入一些實驗數(shù)據(jù):
我們可以根據(jù)分組查詢先將重復數(shù)據(jù)查詢出來,同時也可以獲取到最后的更新時間,然后再與原表聯(lián)表查詢小于最大時間的數(shù)據(jù),將查詢出來的數(shù)據(jù)刪除。
------先來慢慢消化-------
在做刪除前,我們可以先看看有哪些數(shù)據(jù)是有重復的:
可以看到張三,李四,王五的數(shù)據(jù)是有重復的,趙六沒有重復,下面我們查找最后更新的記錄。
可以看到,最后更新的數(shù)據(jù)為15:57:46的記錄沒有在結果中。
可以看到重復記錄已經被清理掉。
假如有兩行記錄是完全一樣的,這個方法就不可行了,往表里面在跑一次數(shù)據(jù)插入:
執(zhí)行刪除計劃:
創(chuàng)建一個臨時表存放最后插入的一條數(shù)據(jù)(包含重復與沒有重復的),然后清空原表,再將臨時表的數(shù)據(jù)復制到原表中,最后把臨時表刪除。
這個很好理解,相當于ctrl+c,ctrl+v的操作,數(shù)據(jù)表如下:
這樣數(shù)據(jù)去重就完成了,需要注意的是, 如果表數(shù)據(jù)量很大,注意在group by 里面的字段建立索引,同時,生產環(huán)境注意好先進行數(shù)據(jù)備份操作 。
刪除數(shù)據(jù)表中重復數(shù)據(jù),可以使用以下SQL語句:
mysql CREATE TABLE tmp SELECT no, name, sex FROM student GROUP BY (no, sex);
mysql DROP TABLE student;
mysql ALTER TABLE tmp RENAME TO student;
也可以在數(shù)據(jù)表中添加INDEX(索引)和 PRIMAY KEY(主鍵)來刪除表中的重復記錄,方法如下:
mysql ALTER IGNORE TABLE student
- ADD PRIMARY KEY (no);
MySQL 刪除重復數(shù)據(jù)
有些 MySQL 數(shù)據(jù)表中可能存在重復的記錄,有些情況我們允許重復數(shù)據(jù)的存在,但有時候我們也需要刪除這些重復的數(shù)據(jù)。
本章節(jié)我們將為大家介紹如何防止數(shù)據(jù)表出現(xiàn)重復數(shù)據(jù)及如何刪除數(shù)據(jù)表中的重復數(shù)據(jù)。
刪除重復數(shù)據(jù)
如果你想刪除數(shù)據(jù)表中的重復數(shù)據(jù),你可以使用以下的SQL語句:
from 樹懶學堂 - 一站式數(shù)據(jù)知識平臺
當然你也可以在數(shù)據(jù)表中添加 INDEX(索引) 和 PRIMAY KEY(主鍵)這種簡單的方法來刪除表中的重復記錄。方法如下: