我有一个表Orders
(列orderId
,orderType
,userId
,state
,...)。我需要我的流程来执行以下操作:
所以基本上我想确保总是只有一个订单:
但我无法创建约束,因为x1,y1,z1可能存在多个订单。
我必须说我在Oracle中没有经验。我已经在Oracle上的锁上读了this article,并且它确定了唯一有用的锁定类型是:
LOCK TABLE Orders IN EXCLUSIVE MODE
但我认为仅针对某些数据子集锁定整个表格是过度的。我使用SELECT ... FOR UPDATE OF <update_column>
的不同列尝试了<update_column>
,但是他们允许我插入新行。
这种类型的并发是否有任何模式?它为Oracle为SELECT-UPDATE模式创建SELECT ... FOR UPDATE OF ...
的接缝。 SELECT-INSERT有什么类似的东西吗?
答案 0 :(得分:6)
您可以创建基于函数的唯一索引来强制执行此类约束。如果您要强制执行state
“完成”的唯一行,但允许许多行{“1”}为“草稿”。
state