MySQL - 使现有的Field Unique

Lot*_*har 143 mysql unique-constraint

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

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

WuH*_*ted 275

ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);
Run Code Online (Sandbox Code Playgroud)

对于MySQL 5.7.4或更高版本:

ALTER TABLE mytbl ADD UNIQUE (columnName);
Run Code Online (Sandbox Code Playgroud)

从MySQL 5.7.4开始,删除了ALTER TABLE的IGNORE子句,并且它的使用会产生错误.

因此,请确保首先删除重复的条目,因为不再支持IGNORE关键字.

参考

  • +1`如果指定了IGNORE,则只对第一行使用唯一键上具有重复项的行,其他冲突行将被删除.[Docs](http://dev.mysql.com/doc/refman/5.1 /en/alter-table.html) (60认同)
  • 为了您的数据安全,"ALTER IGNORE"仍可能在MySQL版本5.5和InnoDB上给出重复错误.如果您确定保留第一个重复行是正确的,请尝试`set session old_alter_table = 1`.别忘了把它放回去.http://mysqlolyk.wordpress.com/2012/02/18/alter-ignore-table-add-index-always-give-errors/ (7认同)
  • 对于任何使用5.6.7或更高版本绊倒的人,不再支持IGNORE.[moredocs](http://dev.mysql.com/doc/refman/5.6/en/alter-table.html)我想现在的方法是确保你没有重复,不是吗? (2认同)

Riz*_*ani 32

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

ALTER TABLE TableName ADD UNIQUE (FieldName)
Run Code Online (Sandbox Code Playgroud)

例.

ALTER TABLE TableName ADD UNIQUE (FieldName)
Run Code Online (Sandbox Code Playgroud)

谢谢


ype*_*eᵀᴹ 14

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

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
Run Code Online (Sandbox Code Playgroud)


Zul*_*lan 7

CREATE UNIQUE INDEX foo ON table_name (field_name)

(您必须在此之前删除重复的值.)


小智 5

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

使用 PHPMYADMIN 管理面板!

那里有俄语版本,但英语版本应该是相同的。只需单击“唯一”按钮即可。此外,您还可以从那里将列设置为主列或删除列。