【问题标题】:How to avoid violation of constraints for insert and Updates in Oracle DB如何避免违反 Oracle DB 中插入和更新的约束
【发布时间】:2017-01-02 15:18:20
【问题描述】:

我正在构建一个 Web 应用程序。它在数据库中插入记录。我在将记录插入数据库之前验证记录。如果在我的验证检查和插入之间,另一个应用程序将 db 状态设置为,如果我尝试插入这些我刚刚验证插入的记录,则会发生唯一键违规约束。我怎样才能避免这种问题。我使用的是oracle数据库,我的开发语言是java。

【问题讨论】:

  • 你可以使用锁。
  • 如果另一条记录插入该行,您希望当前线程对该行做什么?丢弃数据?更新数据?很大程度上取决于此。你可以使用锁,可以使用一个标志来插入行,当你觉得记录不好时清除它,或者如果你觉得它好就插入它。在插入或更新之前让其他线程查看标志。
  • 捕获异常并处理

标签: java oracle


【解决方案1】:

基本上,除非你改变你的约束,否则你不能。您有几种方法:

  1. 您保留唯一约束并在 Java 代码中处理数据库异常。竞争条件可能会发生,您必须处理它。

  2. 一旦有人在您的应用程序中进入“插入模式”,您就会锁定整个表,从而有效地将插入限制为一次插入一个。这意味着阻止您的应用程序中的其他用户进入编辑模式,直到第一个用户完成。可能不是一个好主意,但可以在用户很少的情况下使用。

  3. 删除约束。现在这可能看起来很困难,但请考虑一下。您真的需要某些领域的全球唯一条目吗?或者您可以通过在您的密钥中包含一个附加列来解决这个问题。这可能是一个人工计数器,有效地使每一行再次唯一,或者可能只是 UserID,以便仅在每个用户内检查唯一约束?

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    相关资源
    最近更新 更多