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约束在表继承中的使用相关推荐

  1. mysql的check约束怎么设置_Mysql中怎样实现check约束?

    现在要说的是在列这一层次过滤的基于表定义之前就规范好的 CHECK 约束.(MySQL 版本 >= 8.0.16)mysql> create table f1 (r1 int constr ...

  2. Mysql数据库check约束语句_MySQL数据库中的check约束问题

    MySQL中的check约束不同于ORACLE那么方便,check数量较少的可以使用ENUM来进行类似check约束的检查. 例: CREATE TABLE test( no ENUM('0','1' ...

  3. oracle建表时check约束用法,Oracle之Check约束实例具体解释

    Oracle | PL/SQL Check约束使用方法具体解释 1. 目标 实例解说在Oracle中怎样使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表 ...

  4. Oracle表字段check语句,sql语句大全之SQL CHECK 约束

    SQL CHECK 约束 SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约 ...

  5. SQLServer之修改CHECK约束

    使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...

  6. SQL语法之 CHECK 约束

    SQL学习 学习SQL语法 SQL语法 SQL学习 SQL语法之 CHECK 约束 SQL CHECK Constraint on CREATE TABLE SQL CHECK Constraint ...

  7. Oracle之Check约束实例详解

    Oracle | PL/SQL Check约束用法详解 1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增 ...

  8. mysql_check_mysql CHECK约束 语法

    mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此约束会在特 ...

  9. SQL CHECK 约束

    SQL CHECK 约束 CHECK 约束用于限制列中的值得范围. 如果对单个定于的CHECK 约束,那么该列只允许特定的值. 如果对一个表定于CHECK 约束,那么此约束会基于行中其他列的值在特定的 ...

  10. SQL学习之check约束

    目录 参考源 SQL check 约束 示例数据 create table 添加 check 约束 多个字段添加约束 给 check 约束命名 alter table 时的 SQL check 约束 ...

最新文章

  1. CVE-2018-4407 苹果设备远程溢出漏洞
  2. java性能调优工具--笔记
  3. 论文浅尝 | 利用开放域触发器知识改进事件检测
  4. linux 系统改名,linux改名命令
  5. 独家总结| 基于深度学习的目标检测详解
  6. Android笔记 对话框demo大全
  7. Sybase常用配置参数
  8. 跨平台异步IO库 libuv 源代码接口详解
  9. Python使用pandas合并多个Excel文件
  10. 第二:Postman做各种类型的http接口测试
  11. Android自定义属性时TypedArray的使用方法
  12. 数据库服务器修改地址,数据库服务器修改地址吗
  13. nodejs pm2教程(转载)
  14. 如何用一头死驴赚到998元
  15. java 设计模式 抽象工厂_Java设计模式----------抽象工厂模式
  16. 精心整理Node.js入门---原理篇
  17. 支持断电保护的FAT文件系统
  18. 计算机CPU对外设的访问方法
  19. 测序深度和覆盖度(Sequencing depth and coverage)
  20. OpenCV合并图片cv2.add、无缝连接图片cv2.addWeighted、图片克隆cv2.seamlessClone 效果对比、按位运算bitwise_and

热门文章

  1. Simon Phipps是开源计划总裁
  2. Fluent材料属性之比热容计算方法
  3. 【HDU4622】Reincarnation-后缀自动机
  4. The 2018 ACM-ICPC Asia Qingdao Regional Contest (Mirror)
  5. my python voyage
  6. QuickTime格式解析
  7. 数据库04—约束条件
  8. 19.IIC通信:PCF8591:数模/模数转换芯片
  9. 第二天性-人类进化的经济起源
  10. Warning: Procedure created with compilation errors.