我正在构建一个Web应用程序。它在数据库中插入记录。我在将记录插入数据库之前验证记录。如果在我的验证检查和插入之间,另一个应用程序将db状态设置为如果我尝试插入我刚刚验证插入的这些记录,则会发生唯一的密钥违规约束。我怎样才能避免这种问题。我使用的是oracle数据库,我的开发语言是java。
答案 0 :(得分:1)
基本上,除非你改变约束,否则你不能这样做。您有几种方法可以:
保留唯一约束并处理Java代码中的数据库异常。竞争条件可能会发生,你必须处理它。
只要有人进入"插入模式"就会锁定整个表格。在您的应用中,有效地限制插入一次一个。这意味着阻止应用程序中的其他用户进入编辑模式,直到完成第一个用户。可能不是一个好主意,但是当你的用户很少时可以工作。
删除约束。现在这看起来很难,但想一想。在某些领域,您真的需要全球唯一的参赛作品吗?或者你可以通过在密钥中包含一个额外的列来解决这个问题。这可能是一个人为的计数器,有效地使每一行都是唯一的,或者可能只是UserID,所以只在每个用户中检查唯一约束?