对于现有表,是否允许在可能具有重复值的列上创建唯一值?
问问题
3723 次
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 回答