我最近收到了一个案例,我的客户遇到了ORA-00001:唯一约束违反了错误。当一个程序试图截断两个表然后将数据插入其中时,就会发生这种情况。从错误-log文件中,截断步骤完成,从Internet_group中删除从Internet_item
删除但是,此后,插入Internet_group表的插入触发了ORA-00001错误。我想知道是否有与此错误有关的数据库设置?我从来没有使用过Oracle,并且想知道Oracle是否将锁定与SELECT语句一起锁定,在这种情况下,该行被锁定并且没有以某种方式删除?任何帮助都将不胜感激。
请知道截断和删除之间存在差异。您说您截断了桌子,但提到"删除"。那是完全不同的。如果您确定要清空桌子,请尝试替换
truncate table internet_group reuse storage;
请注意,截短语句不需要提交,因为这被视为DDL(数据定义语言)语句,而不是DML(数据修改语言)语句(如更新和删除)。
另外,选择上没有行锁定。但是,仅在提交时,仅适用于数据库中的其他会话和更改。我想那是瓦特发生的;您删除了记录,但尚未执行提交(尚未执行),然后插入新记录。
编辑:我现在意识到您可能正在插入多个记录。另一个选项可能是数据本身会导致违规行为。您能提供桌子上的约束吗?必须有一个主要键或独特的约束。您可能需要在数据集中握住它。