尝试向 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:如何使物化视图中的列成为主键

为啥 MySQL 在使用 DATE(`table`.`column`) 时会删除我的索引

如何在 MariaDB/MySQL 工作台中获取 SELECT 语句的输出,以“table.column”格式命名列,而不仅仅是“column”?

怎么向sqlite数据库里插数据?

MySQL-数据表

修改存储在 Table Column 中的 JSON 字符串的属性值