CHECK约束在表继承中的使用
2019独角兽企业重金招聘Python工程师标准>>>
1.check约束的创建语法
语法:
ALTER TABLE table_name
ADD CONSTRAINT check_name
CHECK ( check_condition ) [ NOT VALID] [ NO INHERIT];
table_name 是约束所在的表名,可以有模式名修饰;
check_name 是本约束的名称;
check_condition 是本约束的检查条件;
NOT VALID可指定也可不指定。指定NOT VALID时,会在本约束创建时检查表table_name中的已有数据是否符合本检查约束,如果全部符合则可创建,否则本约束无法创建;不指定NOT VALID时,则不检查表中已有数据是否符合,可直接创建该约束。
NO INHERIT可指定也可不指定。指定NO INHERIT时,表table_name的子表不会继承该约束,子表中插入数据时不会检查是否符合本约束;不指定NO INHERIT时,表table_name的子表会继承该约束,子表中插入数据时会检查是否符合 。
对于表继承,子表中插入的数据也会插入到母表中;母表中插入的数据,不会插入到子表中。
2.SQL测试
create table parent (id int ,name varchar);--母表
create table child() inherits(parent);--子表--在对子表插入数据时,也会检查是否符合母表的check约束(仅检查INHERIT的check约束)
ALTER TABLE parent ADD CONSTRAINT ck_id CHECK (id > 1) NOT VALID;
postgres=# insert into parent values(0,'lyy');
ERROR: new row for relation "parent" violates check constraint "ck_id"
error: Failing row contains (0, lyy).
postgres=# insert into child values(0,'lyy');
ERROR: new row for relation "child" violates check constraint "ck_id"
error: Failing row contains (0, lyy).--创建check约束时是valid,那么会检查表中已有数据是否符合本约束,如果是NOT VALID则不会检查。
postgres=# insert into parent values(2,'lyy');
INSERT 0 1
postgres=# ALTER TABLE parent ADD CONSTRAINT ck_id2 CHECK (id > 2) NO INHERIT NOT VALID;
ALTER TABLE
postgres=# ALTER TABLE parent ADD CONSTRAINT ck_id3 CHECK (id > 2) NO INHERIT;
ERROR: check constraint "ck_id3" is violated by some row--validate母表的check约束时,如果该约束是NO INHERIT,那么会先到字表中去检查?。。。,否则不检查子表。
postgres=# ALTER TABLE parent VALIDATE CONSTRAINT ck_id;
ALTER TABLE
postgres=# ALTER TABLE parent VALIDATE CONSTRAINT ck_id2;
ERROR: constraint "ck_id2" of relation "child" does not exist--在对子表插入数据时,也会检查是否符合母表的check约束(不检查NO INHERIT的check约束)
--对子表中插入的数据,也在母表中插入;对母表中插入的数据不会在子表中插入。
postgres=# insert into child values(1,'lyy');
ERROR: new row for relation "child" violates check constraint "ck_id"
error: Failing row contains (1, lyy).
postgres=# insert into child values(2,'sss');
INSERT 0 1
postgres=# select * from child;id | name
----+------2 | sss
(1 row)postgres=# select * from parent;id | name
----+------2 | lyy2 | sss
(2 rows)
转载于:https://my.oschina.net/liuyuanyuangogo/blog/546600
CHECK约束在表继承中的使用相关推荐
- mysql的check约束怎么设置_Mysql中怎样实现check约束?
现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束.(MySQL 版本 >= 8.0.16)mysql> create table f1 (r1 int constr ...
- Mysql数据库check约束语句_MySQL数据库中的check约束问题
MySQL中的check约束不同于ORACLE那么方便,check数量较少的可以使用ENUM来进行类似check约束的检查. 例: CREATE TABLE test( no ENUM('0','1' ...
- oracle建表时check约束用法,Oracle之Check约束实例具体解释
Oracle | PL/SQL Check约束使用方法具体解释 1. 目标 实例解说在Oracle中怎样使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表 ...
- Oracle表字段check语句,sql语句大全之SQL CHECK 约束
SQL CHECK 约束 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约 ...
- SQLServer之修改CHECK约束
使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...
- SQL语法之 CHECK 约束
SQL学习 学习SQL语法 SQL语法 SQL学习 SQL语法之 CHECK 约束 SQL CHECK Constraint on CREATE TABLE SQL CHECK Constraint ...
- Oracle之Check约束实例详解
Oracle | PL/SQL Check约束用法详解 1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增 ...
- mysql_check_mysql CHECK约束 语法
mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此约束会在特 ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值得范围. 如果对单个定于的CHECK 约束,那么该列只允许特定的值. 如果对一个表定于CHECK 约束,那么此约束会基于行中其他列的值在特定的 ...
- SQL学习之check约束
目录 参考源 SQL check 约束 示例数据 create table 添加 check 约束 多个字段添加约束 给 check 约束命名 alter table 时的 SQL check 约束 ...
最新文章
- CVE-2018-4407 苹果设备远程溢出漏洞
- java性能调优工具--笔记
- 论文浅尝 | 利用开放域触发器知识改进事件检测
- linux 系统改名,linux改名命令
- 独家总结| 基于深度学习的目标检测详解
- Android笔记 对话框demo大全
- Sybase常用配置参数
- 跨平台异步IO库 libuv 源代码接口详解
- Python使用pandas合并多个Excel文件
- 第二:Postman做各种类型的http接口测试
- Android自定义属性时TypedArray的使用方法
- 数据库服务器修改地址,数据库服务器修改地址吗
- nodejs pm2教程(转载)
- 如何用一头死驴赚到998元
- java 设计模式 抽象工厂_Java设计模式----------抽象工厂模式
- 精心整理Node.js入门---原理篇
- 支持断电保护的FAT文件系统
- 计算机CPU对外设的访问方法
- 测序深度和覆盖度(Sequencing depth and coverage)
- OpenCV合并图片cv2.add、无缝连接图片cv2.addWeighted、图片克隆cv2.seamlessClone 效果对比、按位运算bitwise_and