具有唯一索引和主键的列给出唯一约束违规

Posted

技术标签:

【中文标题】具有唯一索引和主键的列给出唯一约束违规【英文标题】:Column with Unique Index and Primary Key gives Unique Constraint Violation 【发布时间】:2015-02-03 16:51:47 【问题描述】:

我刚刚在 PL/SQL Devloper 上创建了一个表。我创建的表有一个 ID 列。对于本专栏,我设置了一个主键 (PK_ID)。该列还有一个名为 PK_ID 的唯一索引。

我试图通过这样写来插入到这个表中:

INSERT INTO ADMIN.MESSAGE_LIST (TEXT, TEXTER, ID)
VALUES ('This is a Test','Tim', 1);

我收到错误“ORA-00001:违反唯一约束 (ADMIN.PK_ID)”

我在表中没有其他插入(当前为空),我认为插入 1 因为 ID 是唯一的。

我也没有设置序列和触发器来自动增加 ID 列,因为老实说我不知道​​如何编辑表来做到这一点(这就是为什么我刚刚插入 ID 为 1 作为测试)。

如果表为空,为什么我不能插入 ID 为 1 的内容?在那种情况下,它不会仍然是独一无二的吗?

(注意:在不包含 ID 和值 1 的情况下运行命令会给我一个错误,提示我无法在 ID 列中插入“NULL”)

【问题讨论】:

该表似乎不太可能是空的。如果表中有另一行 ID 为 1,您只会收到该错误。 下一行是否有分号和/,导致语句被执行两次?然后,您会在错误消息之前看到“插入了 1 行”。 (或尝试插入 null 的两条错误消息)。 【参考方案1】:

请执行一个简单的语句:

select * from admin.message_list where id = 1;

如果它不返回行,您应该检查约束 PK_ID 是否引用 ID 列,如果是,请请求 Oracle 支持修复错误。

【讨论】:

以上是关于具有唯一索引和主键的列给出唯一约束违规的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库主键约束与唯一索引有啥区别?

唯一性约束和唯一性索引的区别

SQLServer主键和唯一约束的区别

主键、外键和索引的区别?

Oracle数据库主键约束与唯一索引有啥区别?

SQL中Unique约束有啥用啊?