【问题标题】:Using a 'not in' query inside of a check constraint in SQL在 SQL 的检查约束内使用“不在”查询
【发布时间】:2021-12-15 08:27:21
【问题描述】:

我有两张桌子,一张是学生桌子,一张是员工桌子:

create table student (
id int not null primary key
)
create table staff (
id int not null primary key
)

我希望每个中的 id 都是唯一的。我知道这在生产中不应该是这样,但我只是想看看为什么我的检查约束不起作用,我正在使用一个更简单的例子来解释。

然后我更改表格以包含以下检查:

alter table student add constraint not_staff check (id not in (select id from staff))
alter table staff add constraint not_student check (id not in (select id from student))

这些检查似乎无效。

我的问题是我们是否可以在检查约束中包含这些类型的 SQL 语句。如果是这样,为什么上述约束无效,我将如何解决它。

谢谢!

【问题讨论】:

  • 创建一个执行检查的用户定义函数,并从表检查约束中调用它。或者,您可以使用数据库触发器。

标签: sql db2 constraints


【解决方案1】:

您不能在 Db2 的检查约束中使用查询。参考CREATE TABLE语句的描述。

CHECK(检查条件)
定义检查约束。表中每一行的搜索条件必须为真或未知。
搜索条件
搜索条件有以下限制:
...

  • 搜索条件不能包含以下任何内容 (SQLSTATE 42621):
    • 子查询

实现目标的最简单方法不是创建约束,而是创建一个序列并在两个表的触发器之前使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    相关资源
    最近更新 更多