【问题标题】:CHECK constraint evaluation in SQL 92SQL 92 中的 CHECK 约束评估
【发布时间】: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


【解决方案1】:

答案是不。

(可选)功能 F671,“CHECK 约束中的子查询”在 SQL-99 中引入。

(但是,我不确定允许引用哪个表。)

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多