我有一个表Orders (列为orderId、orderType、userId、state、.)。我需要我的程序来做以下工作:
因此,基本上,我想保证,总只有一个订单:
但是,我不能创建约束,因为x1、y1、z1可能存在多个订单。
我必须说我对甲骨文没有经验。我在Oracle中读过锁上的这篇文章,这里唯一有用的锁类型是:
LOCK TABLE Orders IN EXCLUSIVE MODE但是,我认为只为某些数据子集锁定整个表是过分的。我尝试使用不同的列来表示SELECT ... FOR UPDATE OF <update_column>,但是它们允许我插入新的行。
这种类型的并发有什么模式吗?甲骨文为选择更新模式创建了SELECT ... FOR UPDATE OF ...。SELECT-INSERT有类似的内容吗?
发布于 2013-09-17 17:07:32
您可以创建一个基于函数的唯一索引来强制执行这种约束。如果您想强制执行有一个唯一的行,其state为“已完成”,但允许许多行具有state为“草稿”。
CREATE UNIQUE INDEX idx_index_name
ON( CASE WHEN state = 'Done' THEN orderType ELSE NULL END,
CASE WHEN state = 'Done' THEN userId ELSE NULL END,
CASE WHEN state = 'Done' THEN state ELSE NULL END );https://stackoverflow.com/questions/18854991
复制相似问题