MySQL中刪除重複記錄

工做中,咱們常常有須要刪除一些重複數據的這種需求。重複數據多是程序bug形成的數據庫

好,讓咱們看看如何刪除這些重複數據ide

刪除重複數據的思路呢,是這樣的,查看根據這個重複字段分組後的結果有沒有大於1的狀況
若是有大於的1的狀況呢,那就說明是有重複數據的!3d

1) 建立數據庫code

create database ceshi;

2) 建立表blog

CREATE TABLE t1 (
   id int(10) unsigned NOT NULL AUTO_INCREMENT,
   name varchar(20) not null,
   createdAt timestamp NOT NULL DEFAULT current_timestamp(),
   updatedAt timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

3) 插入數據
insert into t1 values(null,'haha',now(),now()),(null,'haha',now(),now()),(null,'xixi',now(),now()),(null,'heihei',now(),now()),(null,'hoho',now(),now()),(null,'hoho',now(),now()),(null,'sasa',now(),now()),(null,'haha',now(),now()),(null,'sasa',now(),now()),(null,'xixi',now(),now());it

4) 查看數據
select * from t1;table

MySQL中刪除重複記錄

5) 根據最小id,重複字段name分組,假設咱們的需求就是最後要保留第最小id的這些數據,把其它重複的刪除
select min(id),name from t1 group by name having count(name)>1 order by id;
MySQL中刪除重複記錄class

6) 使用別名關聯一下,這些數據就是重複的,最後要刪除的
select a.* from t1 a,(select *,min(id) from t1 group by name having count(name)>1)as b where a.name=b.name and a.id>b.id;date

MySQL中刪除重複記錄

7) 記得先備份一下數據
create table bak_t1_20190621 like t1;select

insert into bak_t1_20190621 select * from t1;

8) 刪除數據
delete a from t1 a,(select *,min(id) from t1 group by name having count(name)>1)as b where a.name=b.name and a.id>b.id;

9) 最後檢查一下,確實已經沒有重複數據了

MySQL中刪除重複記錄

相關文章
相關標籤/搜索