美文网首页
mysql添加唯一索引的时候有重复数据

mysql添加唯一索引的时候有重复数据

作者: 斡旋_ASL | 来源:发表于2022-05-26 17:50 被阅读0次
场景
有这样一种情况
在创建表的时候忘记添加唯一键
发现的时候已经有重复数据
对已有重复数据的处理方案是,留下最先创建那一条数据
1.创建表,并插入数据,还原问题现场
DROP TABLE IF EXISTS `test`;

CREATE TABLE `test` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT  COMMENT '主键id',
  `name` VARCHAR(10) NOT NULL COMMENT 'name',
  PRIMARY KEY (`id`) 
) COMMENT='test';

INSERT INTO test(`name`) values
('张三'),
('张三'),
('李四'),
('李四'),
('李四'),
('李四'),
('王五');
2.查看添加数据
SELECT * FROM test;
1.jpg
3.直接添加唯一索引
ALTER TABLE `test` ADD UNIQUE(`name`);
2.jpg
4.分组查看重复数据重复次数
SELECT `name`, COUNT(id) FROM test GROUP BY `name`;
3.jpg
5.找出重复数据的id,并且查出要保留的id
SELECT `name`, COUNT(id), GROUP_CONCAT(id), MIN(id) FROM test GROUP BY `name` HAVING COUNT(id) > 1;
4.jpg

这里的GROUP_CONCAT(id)就是重复的id,MIN(id)数据就是要保留的数据

6.过滤出需要删除数据id
SELECT `name`, COUNT(id), replace(GROUP_CONCAT(id), min(id), '') id FROM test GROUP BY `name` HAVING COUNT(id) > 1;
5.jpg

这里id的数据就是我们需要删除的数据了

7.把需要删除的id整合到一列
SELECT GROUP_CONCAT(id) FROM (
SELECT `name`, COUNT(id), replace(GROUP_CONCAT(id), min(id), '') id
FROM test GROUP BY `name` HAVING COUNT(id) > 1) t
6.jpg
8.完整的删除SQL
DELETE FROM test WHERE  FIND_IN_SET(id, (
SELECT GROUP_CONCAT(id) FROM (
SELECT `name`, COUNT(id), replace(GROUP_CONCAT(id), min(id), '') id
FROM test GROUP BY `name` HAVING COUNT(id) > 1 ) t))
7.jpg
8.jpg
9.添加唯一索引
ALTER TABLE `test` ADD UNIQUE(`name`);
9.jpg

相关文章

  • mysql添加唯一索引的时候有重复数据

    场景 1.创建表,并插入数据,还原问题现场 2.查看添加数据 3.直接添加唯一索引 4.分组查看重复数据重复次数 ...

  • MySQL添加唯一索引避免重复

    在很多情况下,如果我们要往MySQL的表中添加数据,需要做判断是否有重复数据的操作。如果这次要添加的数据在之前就已...

  • Java Web技术经验总结(十五)

    MySQL在旧表中增加唯一索引时,如何处理原有的重复数据?参考:mysql删除重复记录只保留一条 google的c...

  • java高频面试总结(mysql篇)

    1.mysql常用的索引有哪些种类? 答:1)普通索引:针对数据库表创建索引2)唯一索引:索引列值必须唯一,允许有...

  • 数据库索引

    mysql索引 索引类型 normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保...

  • mysql数据库索引

    添加索引的命令:1、添加普通索引 2、添加唯一索引 3、删除索引 4、查询某张数据库表的索引使用 5、EXPLAI...

  • MYSQL记录

    简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础和类型...

  • PHP面试之数据库—创建高性能索引

    真题 简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础...

  • lucene倒排索引结构与基本评分概念

    倒排索引 基本概念 正常索引: 通过唯一id, 查找对应的数据记录, 比如MySql索引 倒排索引: 通过数据内容...

  • face17 mysql创建高性能索引

    mysql创建高性能索引 简单描述 mysql中 索引 主键 唯一索引 联合索引的区别对数据库性能有什么影响 创建...

网友评论

      本文标题:mysql添加唯一索引的时候有重复数据

      本文链接:https://www.haomeiwen.com/subject/tkfpprtx.html