gpt4 book ai didi

sqlite CHECK 对多行的约束

转载 作者:行者123 更新时间:2023-12-03 19:37:46 24 4
gpt4 key购买 nike

如果我有 table :

CREATE TABLE foo (a INTEGER, b INTEGER, c INTEGER, PRIMARY KEY (a, b));

我可以对所有 a 强制执行列约束吗?相同的值(例如 1), c可以是 NOT NULL最多一次。例如:
a  b  c
__________
1 2 NULL
1 3 NULL
1 4 1
1 5 NULL
2 4 1
2 5 NULL

是允许的,因为对于所有 a1 ,只有一个 NON NULL c .然而:
a  b  c
__________
1 2 2
1 3 NULL
1 4 1
1 5 NULL
2 4 1
2 5 NULL

不允许,因为有两个 NOT NULL c 中的值对于 a1 .

我一直在阅读 CHECK 的文档但我不确定如何在 SQLite 中表达这一点,或者是否可以表达......

最佳答案

要检查其他行,您需要一个子查询。 documentation说:

The expression of a CHECK constraint may not contain a subquery.



您可以使用 trigger :
CREATE TRIGGER check_one_c_insert
BEFORE INSERT ON foo
FOR EACH ROW
WHEN NEW.c IS NOT NULL
BEGIN
SELECT RAISE(FAIL, 'another row has non-NULL c')
FROM foo
WHERE a = NEW.a
AND b = NEW.b
AND c IS NOT NULL;
END;

(还有一个类似的 UPDATE 触发器。)

关于sqlite CHECK 对多行的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32985048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com