【问题标题】:MySQL - Make an existing Field UniqueMySQL - 使现有字段唯一
【发布时间】:2011-06-29 14:40:12
【问题描述】:

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

如何让这个字段只接受唯一值?

【问题讨论】:

    标签: mysql unique-constraint


    【解决方案1】:

    CREATE UNIQUE INDEX foo ON table_name (field_name)

    在执行该 sql 之前,您必须删除该列上的重复值。 该列上任何现有的重复值都会将您引导至mysql error 1062

    【讨论】:

      【解决方案2】:

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

      ALTER TABLE TableName ADD UNIQUE (FieldName)
      

      例如:ALTER TABLE user ADD UNIQUE (email)

      【讨论】:

        【解决方案3】:

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

        ALTER TABLE myTable
          ADD CONSTRAINT constraintName 
            UNIQUE (columnName);
        

        【讨论】:

          【解决方案4】:
          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 关键字。

          Reference

          【讨论】:

          • +1 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/…
          • 对于使用 5.6.7 或更高版本偶然发现此问题的任何人,不再支持 IGNORE。 moredocs我想现在的方法是先确保你没有重复,不是吗?
          • 确保在运行此查询之前制作表的备份副本。如果列名具有相同的值或为空,它将删除除第一行之外的所有行。
          【解决方案5】:

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

          alter ignore table ioni_groups add unique (group_name);
          

          【讨论】:

          • 但删除所有重复项,包括列外的重复项
          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:
            ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);
            

            是正确的答案

            插入部分

            INSERT IGNORE INTO mytable ....
            

            【讨论】:

              猜你喜欢
              • 2012-03-20
              • 2018-04-21
              • 1970-01-01
              • 2017-01-08
              • 1970-01-01
              • 2010-10-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多