普通索引转唯一索引,数据重复问题解决

1、前言

在数据库的设计的时候经常会遇到这种问题,建立了普通索引想转唯一索引,但是数据库有重复数据了。而且数据不好找和删除。这个时候怎么办呢?

2、纯SQL解决

这里给一个例子:
表 student 其数据结构如下:

id name grade score
1 zhanghanlun 1 2
2 zhanghanlun 1 3
3 zhangwei 1 0

在这个表中我们想要新建唯一索引 uniq_name_grade (name,grade)
但是有重复的数据,怎么办呢?
执行下面的SQL

ALTER IGNORE TABLE student ADD UNIQUE INDEX `uniq_name_grade` (`name`,`grade`);

重点是ignore参数,会将重复的数据删掉,保留一条。
现在的表的结构如下:

id name grade score
1 zhanghanlun 1 2
3 zhangwei 1 0

执行SQL完将重复的数据删掉了,只保存了一条数据
其表的DDL如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  `grade` int(10) NOT NULL,
  `score` int(10) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_name_grade` (`name`,`grade`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

你可能感兴趣的:(MySQL,Bug记录,唯一索引,重复数据,MySQL)