【发布时间】:2023-01-31 04:00:05
【问题描述】:
什么时候根据 SQL 92 标准评估检查约束?
create table a (
val INT
);
create table b (
f CHECK ( f in (SELECT val from a))
);
a) 根据 SQL-92 标准是否允许使用子查询进行检查?
b) 如果是,CHECK 什么时候执行?
scenario:
insert 1 into a
insert 1 into b
delete 1 from a (CHECK is violated here, but is it checked again?)
【问题讨论】:
-
a) 的答案是否定的。
-
不管标准怎么说,你都很难找到一个允许这样做的引擎,正是因为难以确定何时应该检查约束(原则上可以对每条语句进行检查,但效率非常低任何实用的引擎都负担不起)。您在此处编写的内容也可以使用普通的旧外键来完成,这样检查起来要简单得多。
-
@JeroenMostert 感谢您的评论!这是其中一项测试中的理论问题。我认为这个问题很愚蠢,但为了确定我在这里问了!
标签: sql check-constraints ansi-sql-92