我最近收到了一个案例,我的客户遇到了ORA-00001:唯一约束违规错误。当程序试图截断两个表然后将数据插入其中时,就会发生这种情况。 从错误日志文件中,截断步骤已完成, 从INTERNET_GROUP中删除 从INTERNET_ITEM中删除
但在此之后,插入Internet_group表会触发ORA-00001错误。我想知道是否有与此错误相关的数据库设置?我从来没用过Oracle,我想知道Oracle是否用SELECT语句锁定了一行,在这种情况下,行被锁定而不是以某种方式删除?任何帮助表示赞赏。
答案 0 :(得分:0)
请注意截断和删除之间存在差异。你说你截断了表,但你提到“删除”。这完全不同。 如果您确定要清空表格,请尝试使用
替换truncate table internet_group reuse storage;
请注意,truncate语句不需要提交,因为这被认为是DDL(数据定义语言)语句而不是DML(数据修改语言)语句,如更新和删除。
此外,选择时没有行锁定。但是,只有在提交时,才会对数据库中的其他会话应用和显示更改。 我猜这是发生的事情;您删除了记录但未执行提交(尚未)并随后插入新记录。
编辑: 我现在意识到你可能正在插入多个记录.... 另一种选择可能是,数据本身会导致违规。你能否提供桌子上的限制?必须有主键或唯一约束。您可能希望将其与数据集保持一致。