Oracle数据库事务可以在这种情况下提供帮助

时间:2014-09-22 03:21:29

标签: oracle transactions oracle11g database-concurrency

我正在使用Oracle数据库(11g第2版)。想象一下多个连接同时执行以下操作:

  1. 开始交易
  2. 检查唯一值表中是否存在特定值
  3. 如果该值不存在,请将其插入
  4. 提交交易
  5. 在我看来,防止冲突的唯一方法是阻止连接执行上述4步序列,而任何其他连接当前正在执行4步序列。

    事务可以在Oracle中实现这种广泛的锁定/阻塞吗?

    提前感谢您就如何最好地处理这种情况提供答案和建议。

1 个答案:

答案 0 :(得分:1)

添加唯一的检查约束,并实现异常处理程序以获取下一个序列,然后重试。

这假设你正在使用pl / sql。

另一种方法是使用Oracle序列,缓存大小为1.这也将确保序列中没有间隙 2. SELECT * FROM table_name FOR UPDATE阻止来自其他会话的所有读取......