Skip to content

MySQL删除数据库中重复的数据

TIP

MySQL中经常会遇到重复的数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?如何删除重复的数据?我们该怎么做呢?接下来我们一步步来分析一下遇到这样的情况后,该如何处理

表结构

  • 假如有一张表结构如下
shell
CREATE TABLE `test_user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '姓名',
  `mobile` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '手机号',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

表数据

  • 假如表中有如下数据
shell
INSERT INTO `test_user` (`id`, `username`, `mobile`) VALUES
(1, '张三', '13888888886'),
(2, '李四', '13888888887'),
(3, '王五', '13888888888'),
(4, '赵六', '13888888889'),
(5, '张三', '13888888886'),
(6, '李四', '13888888887'),
(7, '王五', '13888888888'),
(8, '王五', '13888888888'),
(9, '老七', '13888888889');
idusernamemobile
1张三13888888886
2李四13888888887
3王五13888888888
4赵六13888888889
5张三13888888886
6李四13888888887
7王五13888888888
8王五13888888888
9老七13888888889
  • 从上面的数据可以看出,表中有重复的数据,我们需要删除重复的数据

删除重复数据

  • 删除重复数据的SQL语句如下
shell
-- 方法二(推荐方法也容易理解)
DELETE FROM test_user WHERE id NOT IN (
	SELECT t.min_id FROM (
		-- 过滤出重复多余的数据,比如,如果所有记录中存在1条记录是username=张三的,那么就取出它;
    	-- 如果所有记录中存在多条记录是username=老七的,那么只取其中1条,其他的不查询出来
		SELECT MIN(id) AS min_id FROM test_user GROUP BY username
  ) t
)
  • 执行上面的SQL语句,就可以删除重复的数据了
idusernamemobile
1张三13888888886
2李四13888888887
3王五13888888888
4赵六13888888889
9老七13888888889
  • 从上面的数据可以看出,重复的数据已经被删除了

上次更新于: