在 SQL 的检查约束内使用“不在”查询
Posted
技术标签:
【中文标题】在 SQL 的检查约束内使用“不在”查询【英文标题】:Using a 'not in' query inside of a check constraint in 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 语句。如果是这样,为什么上述约束无效,我将如何解决它。
谢谢!
【问题讨论】:
创建一个执行检查的用户定义函数,并从表检查约束中调用它。或者,您可以使用数据库触发器。 【参考方案1】:您不能在 Db2 的检查约束中使用查询。参考CREATE TABLE语句的描述。
CHECK(检查条件) 定义检查约束。表中每一行的搜索条件必须为真或未知。搜索条件 搜索条件有以下限制: ...
搜索条件不能包含以下任何内容 (SQLSTATE 42621): 子查询
实现目标的最简单方法不是创建约束,而是创建一个序列并在两个表的触发器之前使用它。
【讨论】:
以上是关于在 SQL 的检查约束内使用“不在”查询的主要内容,如果未能解决你的问题,请参考以下文章