我有一张桌子Orders
(有列orderId
, orderType
, userId
, state
, ...)。我需要我的流程来执行以下操作:
- 检查是否存在特定类型的订单,特定用户的特定状态(SELECT)。
- 如果这样的订单不存在 - 创建一个(插入)。
所以基本上我想保证总是只有一个订单:
- 订单类型 = x
- 用户 ID = y
- 状态 = z
但是我不能创建约束,因为 x1、y1、z1 可以存在多个订单。
我必须说我在 Oracle 方面没有经验。我已经阅读了有关 Oracle 中锁的这篇文章,它表明唯一有用的锁类型是:
LOCK TABLE Orders IN EXCLUSIVE MODE
但我认为只为某些数据子集锁定整个表是过分的。我尝试SELECT ... FOR UPDATE OF <update_column>
使用不同的列,<update_column>
但它们允许我插入新行。
这种并发有什么模式吗?它是 OracleSELECT ... FOR UPDATE OF ...
为 SELECT-UPDATE 模式创建的接缝。SELECT-INSERT 有什么类似的吗?