尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目错误
Posted
技术标签:
【中文标题】尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目错误【英文标题】:Duplicate entry error when trying to add unique constraint to table.column in MySQL 【发布时间】:2020-10-15 14:34:49 【问题描述】:正如标题所说,我在将此查询插入 mysql 命令行客户端时遇到以下错误
查询
ALTER TABLE 医师添加唯一(ssn);
错误代码
ERROR 1062 (23000): Duplicate entry '' for key 'physician.ssn'
我不知道为什么要提取重复条目错误,因为这不应该是重复条目。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:它告诉你的是它不能添加这个唯一的约束。原因是在医生表中,已经存在具有相同 SSN 值的条目。您可以删除那些重复的记录,然后运行您的 ALTER 语句。
【讨论】:
是否有在不删除记录的情况下向现有 SSN 列添加唯一约束?我的 SSN 列实际上没有任何值,但它只是设置为 NULL。 恐怕不行。无论如何,不应有 2 位医生具有相同的 SSN。【参考方案2】:唯一约束将只允许该列的唯一值。由于您已经有很多行为 NULL,因此 MySQL 将不允许您添加约束。
你有两个选择:
-
使用稍后可以识别的 SSN 的占位符值更新表格。例如,您可以做的一件事是运行更新,将 ssn 列 = 设置为表 pk/id。
改为使用唯一索引。 MySQL 唯一索引忽略 null,但在添加值时将强制唯一性。如果您计划通过 ssn 进行系统搜索,它还具有提供索引搜索的好处。
语法是:
CREATE UNIQUE INDEX physician_ssn_idx ON physician(ssn);
physician_ssn_idx
将是新创建的索引的名称,可以是您想要的任何名称。如果您一直在使用命名方案创建索引/键,您可能希望采用它。归根结底,索引的名称根本不会影响功能,您不需要知道它们就可以使用它们。
【讨论】:
以上是关于尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MySQL 在使用 DATE(`table`.`column`) 时会删除我的索引
如何在 MariaDB/MySQL 工作台中获取 SELECT 语句的输出,以“table.column”格式命名列,而不仅仅是“column”?