检查约束内的子查询

Posted

技术标签:

【中文标题】检查约束内的子查询【英文标题】:sub-queries inside check constraint 【发布时间】:2012-05-17 02:06:40 【问题描述】:

如果我有一个包含 2 个字段(姓名和地址)的人员表。

create table PERSON  (
NAME                 VARCHAR2(50),
ADDRESS              VARCHAR2(100)  
);

我如何确保所有地址相同的人都有不同的名字。

我尝试使用CHECK 约束,网上有一些示例在create table 语句中使用子查询,但出现SQL 错误:

ORA-02251:此处不允许子查询

任何帮助将不胜感激。 谢谢

【问题讨论】:

姓名、地址的唯一索引应该可以。因此,您不能两次插入相同的名称/地址组合。另一方面,这意味着同一地址的所有名称都必须不同。 【参考方案1】:

您不能将行保留在检查约束中。为此,您可以使用触发器。

【讨论】:

我认为唯一约束(根据@a_horse_with_no_name 的评论)比一堆触发器更干净。

以上是关于检查约束内的子查询的主要内容,如果未能解决你的问题,请参考以下文章

更新内的子查询以设置多个值

Oracle-视图,约束

MySQL:子查询检查超过 14000 行的子查询优化问题

查询和更新子项内的子参数

如何向 StackView 的子视图内的视图添加约束

三种常见的子查询