刪除MySQL表的重覆記錄

2021-05-24 22:48:30 字數 1137 閱讀 3224

有時候遇到一些錯誤的資料庫,表中產生了一些重複的記錄,如何刪除多餘記錄就成了一件麻煩的事,今天看到乙個巧妙的解決辦法,利用了mysql的擴充套件特性,很簡單就完成了這項工作。

why make this such a challenge?

assuming your example:

create table bad_table2 (

id int not null unique auto_increment,

name varchar(20) not null

);insert into bad_table2(id,name) values

(1,'things fall apart'),

(2,'things fall apart'),

(3,'the famished road'),

(4,'things fall apart'),

(5,'the famished road'),

(6,'thirteen cents'),

(7,'thirteen cents');

i can remove duplicates easily with the following line:

alter ignore table bad_table2 add unique index `unique_index` (name);

and then remove the added index.

alter table bad_table2 drop index `unique_index`;

viola, dups gone.

這裡有兩個關鍵點,唯一索引和ignore關鍵字,mysql對ignore的解釋如下:

ignore是mysql相對於標準sql的擴充套件。如果在新錶中有重複關鍵字,或者當strict模式啟動後出現警告,則使用ignore控制alter table的執行。如果沒有指定ignore,當重複關鍵字錯誤發生時,複製操作被放棄,返回前一步驟。如果指定了ignore,則對於有重複關鍵字的行,只使用第一行,其它有衝突的行被刪除。並且,對錯誤值進行修正,使之盡量接近正確值。

表刪除重覆記錄 小記

刪除資料庫中重覆記錄方法 表test loge 有兩個字段,乙個是 id,乙個是 name 我們需要刪除多餘的行 1 使用rowid 保留rowid 最大的值 delete from test loge a where rowid select max rowid from test loge b ...

刪除重覆記錄

我們經常在資料庫中有重複的記錄這時候我們希望刪除那些重複的記錄 你不要告訴我你是一條條手動刪除的哈 select distinct into newtable form 程式設計客棧nbsp tablename drop table tabwww.cppcns.comlename select in...

SQL查詢重覆記錄,刪除重覆記錄

1 查詢表中多餘的重覆記錄,重覆記錄是根據單個字段 docid 來判斷 select from tablename where docid in select docid from tablename group by docid h ing count docid 1 例二 select from...