6

对于现有表,是否允许在可能具有重复值的列上创建唯一值?

4

3 回答 3

7

不,这是不允许的。

下面的 SQL:

ALTER TABLE `table`
ADD UNIQUE (`column`)

会产生以下错误:

#1062 - 键“列”的重复条目“数据”

您可以使用以下方法识别重复项:

SELECT * FROM `table`
GROUP BY `column`
HAVING COUNT(`column`) > 1

删除所有重复项后,您可以添加UNIQUE约束。

于 2013-04-24T01:45:38.760 回答
3

实际上这是可能的,至少在 MySQL 5.1+ 中是这样。您可以使用:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX (`column`);

如果你的表是 InnoDB,你需要先运行这个:

set session old_alter_table=1

参考http://www.mikeperham.com/2012/03/02/deleting-duplicate-rows-in-mysql/

编辑:从 MySQL 5.7.4 开始,ALTER TABLE 的 IGNORE 子句被删除,它的使用会产生错误。感谢@EdwardvanKuik 在评论中指出

于 2014-05-28T22:57:45.963 回答
0

这不可能:

Mysql2::Error: Duplicate entry 'foo' for key 'index_clubs_on_url': CREATE UNIQUE INDEX `index_clubs_on_url` ON `clubs` (`url`)
于 2013-04-24T01:45:28.383 回答