【发布时间】:2011-06-29 14:40:12
【问题描述】:
我有一个已经存在的表,其中的字段应该是唯一的,但不是。我只知道这一点,因为在表中创建了一个与另一个已经存在的条目具有相同值的条目,这导致了问题。
如何让这个字段只接受唯一值?
【问题讨论】:
我有一个已经存在的表,其中的字段应该是唯一的,但不是。我只知道这一点,因为在表中创建了一个与另一个已经存在的条目具有相同值的条目,这导致了问题。
如何让这个字段只接受唯一值?
【问题讨论】:
CREATE UNIQUE INDEX foo ON table_name (field_name)
在执行该 sql 之前,您必须删除该列上的重复值。 该列上任何现有的重复值都会将您引导至mysql error 1062
【讨论】:
只需在您的数据库 phpmyadmin 中编写此查询。
ALTER TABLE TableName ADD UNIQUE (FieldName)
例如:ALTER TABLE user ADD UNIQUE (email)
【讨论】:
如果您还想命名约束,请使用:
ALTER TABLE myTable
ADD CONSTRAINT constraintName
UNIQUE (columnName);
【讨论】:
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);
对于 MySQL 5.7.4 或更高版本:
ALTER TABLE mytbl ADD UNIQUE (columnName);
从 MySQL 5.7.4 开始,删除了 ALTER TABLE 的 IGNORE 子句,并且 它的使用会产生错误。
因此,请确保首先删除重复条目,因为不再支持 IGNORE 关键字。
【讨论】:
If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Docs
ALTER 之前进行一些预处理才能完成这项工作。
ALTER IGNORE 可能仍然会在 MySQL 版本 > 5.5 和 InnoDB 上出现重复错误,以确保您的数据安全。如果您确定保留重复行中的第一行是正确的,请尝试set session old_alter_table=1。别忘了把它放回去。 mysqlolyk.wordpress.com/2012/02/18/…
这段代码是为了解决我们为现有表设置唯一键的问题
alter ignore table ioni_groups add unique (group_name);
【讨论】:
最简单最快的方法是使用 phpmyadmin 结构表。
那里是俄文,但英文版应该是一样的。只需单击唯一按钮。您也可以从那里将列设为 PRIMARY 或 DELETE。
【讨论】:
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);
是正确的答案
插入部分
INSERT IGNORE INTO mytable ....
【讨论】: