我有以下表格:
CREATE TABLE test(
flag_1 boolean not null default true,
flag_2 boolean not null default false
);
我想要一个不允许两个标志都为假的约束。至少有一个必须为真。
的例子:
INSERT INTO test VALUES(true, true); // Should work
INSERT INTO test VALUES(true, false); // Should work
INSERT INTO test VALUES(false, true); // Should work
INSERT INTO test VALUES(false, false); // Should fail
我想到了以下内容:
ALTER TABLE test
ADD CONSTRAINT allow_only_one_false
CHECK
(
( CASE WHEN flag_1 is false and flag_2 is false then 0 ELSE 1 END
) = 1
);
它确实有效,但不确定是否有更简单的方法来实现相同的目标。
数据库小提琴:
https://dbfiddle.uk/?rdbms=postgres_13&小提琴= 78885662 e4aee8bfee01c429f86f28c5
感谢你可以做
Check (flag_1 or flag_2)
我认为你应该在更新后使用触发器来确保你的两个字段都是不正确的。
[使用触发][1]https://www.educba.com/sql-after-update-trigger/