【发布时间】:2022-02-25 05:25:20
【问题描述】:
在 Oracle SQL 中
假设一个表的结构如下:
| ID | NAME | DESCRIPTION | ACTIVE_FLAG |
|---|---|---|---|
| 1 | A1234567 | Item Desc 1 | Y |
| 2 | A1234567 | Item Desc 2 | N |
我希望能够在此表上创建一个约束,以便允许以下操作:
INSERT INTO TBL (name, description, active_flag) VALUES('A1234567', 'Item Desc 3', 'N')
UPDATE TBL SET active_flag = 'N' WHERE ID = 1
但这些都不是:
INSERT INTO TBL (name, description, active_flag) VALUES('A1234567', 'Item Desc 3', 'Y')
UPDATE TBL SET active_flag = 'Y' WHERE ID = 2
基本上,我对一个约束感兴趣,这样对于共享 NAME 值的所有行,只有其中一个行可以将其活动标志设置为“Y”
如何实现这样的约束?
【问题讨论】:
-
考虑在这样的约束下,记录更新的顺序很重要。在检查任何其他记录之前,您首先必须取消选中一条记录。如果您想使用 EF 的
SaveChanges()保存大量更改,这可能是个问题。
标签: oracle