唯一约束违反了空表

问题描述:

我最近收到一个我的客户遇到ORA-00001的情况:唯一约束违反了错误。当一个程序试图截断两个表格然后向其中插入数据时发生了这种情况。 从错误日志文件,将truncate步骤完成后, 从INTERNET_GROUP 删除INTERNET_ITEM唯一约束违反了空表

删除

但经过这一权利,插入到Internet_group表引发的ORA-00001错误。我想知道是否有任何数据库设置与此错误相关?我从来没有使用Oracle,我想知道是否Oracle使用SELECT语句对行进行了锁定,在这种情况下,该行被锁定并且不会被删除?任何帮助表示赞赏。

+2

truncate!=删除,但可能不相关。你确定它不只是试图插入多个冲突行吗?您插入的数据本身必须是唯一的,当然,与现有数据相比,并非*只是*。你确定删除没有回滚 - 在发生这种情况后你有没有检查过表中的数据? (可能你有一个腐败的索引或其他东西,但排除显而易见的第一个) –

+1

你可以给一个可重复的例子吗?或者至少涉及DDL/DML? – tbone

+0

是否删除COMMIT? – BobC

请知道截断和删除之间的区别。你说你截断了表,但是你提到了“从...中删除”。这完全不同。 如果你确定要清空表,尝试用

truncate table internet_group reuse storage; 

心灵取代你,因为这被认为是一个DDL(数据定义语言)语句,而不是一个承诺是没有必要与截断声明DML(数据修改语言)语句,如更新和删除。

此外,选择上没有行锁定。但是更改仅在数据库中的其他会话应用并且可见时应用。 我想那是笏发生的;您删除了记录但未执行提交(尚未)并随后插入新记录。

编辑: 我现在意识到你可能会插入多个记录.... 另一种选择可能是,数据本身会导致违规。你能否提供桌上的限制条件?必须有主键或唯一约束。您可能想要对照您的数据集。