176

我有一个已经存在的表,其中的字段应该是唯一的,但不是。我只知道这一点,因为在表中创建了一个与另一个已经存在的条目具有相同值的条目,这导致了问题。

如何使该字段仅接受唯一值?

4

7 回答 7

325
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 关键字。

参考

于 2011-02-18T05:45:15.473 回答
40

只需在您的数据库 phpmyadmin 中编写此查询。

ALTER TABLE TableName ADD UNIQUE (FieldName)

例如:ALTER TABLE user ADD UNIQUE (email)

于 2013-11-04T07:57:24.860 回答
17

如果您还想命名约束,请使用:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
于 2011-02-18T05:48:10.073 回答
7

CREATE UNIQUE INDEX foo ON table_name (field_name)

在执行该 sql 之前,您必须删除该列上的重复值。该列上任何现有的重复值都会导致您出现mysql 错误 1062

于 2011-02-18T05:47:35.487 回答
4

最简单和最快的方法是使用 phpmyadmin 结构表。

使用 PHPMYADMIN 管理面板!

那里是俄语,但英语版本应该是一样的。只需单击唯一按钮。您也可以从那里将列设为 PRIMARY 或 DELETE。

于 2016-07-16T09:58:34.270 回答
2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

是正确的答案

插入部分

INSERT IGNORE INTO mytable ....
于 2014-06-27T17:36:39.807 回答
1

这段代码是为了解决我们为现有表设置唯一键的问题

alter ignore table ioni_groups add unique (group_name);
于 2016-08-01T10:40:25.830 回答