我有以下表格:
汽车:id,名称,状态
一旦我们有一个名称为“SOLD”的记录,我想对汽车的名称强制执行条件约束。
例如:
1, 'BMW', 'NEW'
2, 'BMW', 'NEW'
3, 'BMW', 'SOLD'
4, 'BMW', 'NEW'
前三条记录应该可以顺利插入。但是第四条记录不应该插入,因为我们现在有一个状态为SOLD
的宝马。
这是我尝试过的:
CREATE UNIQUE INDEX cars_sold ON cars (name) WHERE (status = 'SOLD');
这并不像我预期的那样有效。这只能确保我们不能有2个已售出的BMW。
注意:我可以用“INSERT SELECT”实现这一点,但是这个表会变得非常大,所以我想要一个独特约束执行的性能。我也发现可以用“CONSTRAINT CHECK”来做到这一点,但我认为它在幕后基本上执行了一个“SELECT”。
有没有办法在不影响大表性能的情况下实现这一点?概念上看来我总是需要进行选择。