MySQL 搜索以及删除重复数据
前言
在MySQL数据库中会存在一些重复数据,根据需求在数据使用之前可以将重复数据删除,不需再在代码端进行去重操作。
具体操作
我们建立一张简单的表进行演示。
创建表aaa
CREATE TABLE `aaa` (
`id` int NOT NULL AUTO_INCREMENT,
`age` int NOT NULL,
`job` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC
插入一些重复数据
INSERT INTO `aaa` ( `age`, `job`, `name` )
VALUES
( 20, 'Dev', 'Jason' ),
( 34, 'DBA', 'Tom' ),
( 34, 'DBB', 'Jason' ),
( 20, 'Dev', 'Tom' ),
( 34, 'DBC', 'Jason' ),
( 34, 'Dev', 'Jason' ),
( 34, 'DBE', 'Jason' ),
( 34, 'Dev', 'Jason' ),
( 34, 'Dev', 'Jason')
-
展示数据
-
查询name相同的重复数据
查询以name相同的重复数据
select name,count(*) as count from aaa group by name having count > 1;
- 删除重复数据 ;
删除重复数据,即先查出各个类型一个数据,取得它的id,然后删除不在这些id的数据。
delete from aaa where id not in (select a.id from (select min(id) id from aaa group by name) a);
结果