尝试向 MySQL 中的 table.column 添加唯一约束时出现重复输入错误
Duplicate entry error when trying to add unique constraint to table.column in MySQL
正如标题所说,将此查询插入 MySQL 命令行客户端时出现以下错误
查询
ALTER TABLE physician ADD UNIQUE (ssn);
错误代码
错误 1062 (23000): 键 'physician.ssn'
的重复项 ''
我不知道为什么我会出现重复输入错误,因为这不应该是重复输入。感谢任何帮助。
它告诉您的是它无法添加此唯一约束。原因是在 physician table 中,已经有具有相同 SSN 值的条目。您可以删除那些重复的记录,然后 运行 您的 ALTER 语句。
唯一约束将只允许该列的唯一值。由于您已经有很多行为 NULL,MySQL 将不允许您添加约束。
您有 2 个选择:
- 使用您稍后可以识别的 SSN 的占位符值更新 table。例如,您可以做的一件事是 运行 更新,将 ssn 列 = 设置为 table pk/id.
- 改为使用唯一索引。 MySQL 唯一索引忽略空值,但在添加值时会强制唯一性。如果您计划通过 ssn 进行系统搜索,它还具有提供索引搜索的好处。
语法为:
CREATE UNIQUE INDEX physician_ssn_idx ON physician(ssn);
physician_ssn_idx
将是新创建的索引的名称,可以是您想要的任何名称。如果您一直在使用命名方案创建 index/key,您可能希望采用它。最终,索引的名称根本不会影响功能,您不需要知道它们就可以使用它们。
正如标题所说,将此查询插入 MySQL 命令行客户端时出现以下错误
查询
ALTER TABLE physician ADD UNIQUE (ssn);
错误代码
错误 1062 (23000): 键 'physician.ssn'
的重复项 ''我不知道为什么我会出现重复输入错误,因为这不应该是重复输入。感谢任何帮助。
它告诉您的是它无法添加此唯一约束。原因是在 physician table 中,已经有具有相同 SSN 值的条目。您可以删除那些重复的记录,然后 运行 您的 ALTER 语句。
唯一约束将只允许该列的唯一值。由于您已经有很多行为 NULL,MySQL 将不允许您添加约束。
您有 2 个选择:
- 使用您稍后可以识别的 SSN 的占位符值更新 table。例如,您可以做的一件事是 运行 更新,将 ssn 列 = 设置为 table pk/id.
- 改为使用唯一索引。 MySQL 唯一索引忽略空值,但在添加值时会强制唯一性。如果您计划通过 ssn 进行系统搜索,它还具有提供索引搜索的好处。
语法为:
CREATE UNIQUE INDEX physician_ssn_idx ON physician(ssn);
physician_ssn_idx
将是新创建的索引的名称,可以是您想要的任何名称。如果您一直在使用命名方案创建 index/key,您可能希望采用它。最终,索引的名称根本不会影响功能,您不需要知道它们就可以使用它们。