声明:以下内容看完文档仅个人理解,仅供参考,详见下方参考资料。

约束(constraint)

约束分为检查约束(Check Constraints)、非空约束(Not-Null Constraints)、唯一约束(Unique Constraints)、主键(Primary Keys)、外键(Foreign Keys)、排他约束(Exclusion Constraints)。所有约束都可以成为命名约束,创建时带constraint 关键字。

检查约束如:

CREATE TABLE products (product_no integer,name text,price numeric CHECK (price > 0)
);

也可以加命名约束:

CREATE TABLE products (product_no integer,name text,price numeric CONSTRAINT positive_price CHECK (price > 0)
);

列约束与表约束:

CREATE TABLE products (product_no integer,name text,price numeric CHECK (price > 0), # 列约束discounted_price numeric CHECK (discounted_price > 0), #列约束CHECK (price > discounted_price) #表约束
);

非空约束:

CREATE TABLE products (product_no integer NOT NULL,name text NOT NULL,price numeric NOT NULL CHECK (price > 0)
);

唯一约束:

#列约束写法
CREATE TABLE products (product_no integer UNIQUE,name text,price numeric
);
#表约束写法
CREATE TABLE products (product_no integer,name text,price numeric,UNIQUE (product_no)
);

主键约束

一个主键约束表示可以用作表中行的唯一标识符的一个列或者一组列。这要求那些值都是唯一的并且非空。因此,下面的两个表定义接受相同的数据:

CREATE TABLE products (product_no integer UNIQUE NOT NULL,name text,price numeric
);
CREATE TABLE products (product_no integer PRIMARY KEY,name text,price numeric
);

主键也可以包含多于一个列,其语法和唯一约束相似:

CREATE TABLE example (a integer,b integer,c integer,PRIMARY KEY (a, c)
);

增加一个主键将自动在主键中列出的列或列组上创建一个唯一B-tree索引。并且会强制这些列被标记为NOT NULL。
一个表最多只能有一个主键(可以有任意数量的唯一和非空约束,它们可以达到和主键几乎一样的功能,但只能有一个被标识为主键)。

外键
这个在实际生产中应用很少,外键得作用里边不会出现冗余数据,有外键得表依赖被引用得表,外键约束得那一列,必须都是被引用表存在得值,如果不存在,或者对主表操作删除时,外键都会起到级联删除或者由于外键得作用无法操作。

排他约束
排他约束保证如果将任何两行的指定列或表达式使用指定操作符进行比较,至少其中一个操作符比较将会返回否或空值。
详见:http://www.postgres.cn/docs/12/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

参考资料

https://www.postgresql.org/docs/12/ddl-constraints.html
http://www.postgres.cn/docs/12/ddl-constraints.html
http://www.postgres.cn/docs/12/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

Postgresql 约束(constraint)相关推荐

  1. PostgreSQL 约束

    PostgreSQL 约束 一.约束的含义 数据类型是一种限制能够储存在表中数据类别的方法.但是产品的价格的列只能接受正值,但是没有任何一种标准的数据类型只接受正值.或是我们可能需要根据其他列或行来约 ...

  2. 创建和使用约束Constraint

    约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章).在SQ ...

  3. SQL基础--gt; 约束(CONSTRAINT)

    --============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...

  4. 数据库 约束(Constraint)、多表关系和范式

    文章目录 约束 Constraint 分类 多表关系 范式 第一范式1NF. 第二范式2NF 第三范式3NF BCNF 约束 Constraint 概念: 对表中数据进行限制,保证数据正确性.有效性. ...

  5. [MySQL]约束(constraint)

    文章目录 1. 约束 1.1 数据的完整性 1.2 约束 1.3 约束的分类 2. 查看表中的约束 3. 非空约束(NOT NULL) 3.1 作用 3.2 特点 3.3 添加非空约束 3.3.1 建 ...

  6. 默认约束 oracle,ORACLE约束(constraint):对象的强制规定

    ORACLE约束(constraint):对象的强制规定 5种约束: NOT NULL     非空 NN UNIQUE       唯一 UK PRIMARY KEY  主键 PK FOREIGN ...

  7. MySQL 约束(Constraint)

    一.约束的概述 1.为什么要有约束? 为了保证数据的完整性 数据完整性(Date Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability).它是防止数据库中存在不符合 ...

  8. System Verilog的约束constraint

    System Verilog的约束constraint 1.约束块(constraint block) 2.约束块的取值 A.简单表达式 B.约束块权重取值:dist 1.:=取权重 2.:/取权重 ...

  9. MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除

    我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 studen ...

最新文章

  1. postmaster.c 中的 ListenAddresses
  2. java class扫描接口_JAVA 扫描指定路径下所有的jar包,并保存所有实现固定接口的类型...
  3. python的软件叫什么-python是什么软件
  4. 以下代码有什么问题(struct构造问题)
  5. 2.3.2便捷的电子邮件
  6. C# WinForm开发系列 - TextBox
  7. 2019.9.17最小生成树知识点回顾
  8. 【转】Asp.net的生命周期之应用程序生命周期
  9. 求不小于N且二进制串包含K个1的最小的数字
  10. linux界面电池信息,Linux下查看电池损耗等信息
  11. 8021x 获取IP信息失败,请检查锐捷认证客户端当前配置是否符合所在网络的要求,检查完毕后尝试重新认证...
  12. IOS UIKit基础控件的使用
  13. 如何使用 Windows 10 自带的磁盘清理程序?
  14. 设置字体小于12像素,首行缩进,文字间距,居中对齐,文字中划线,文字不换行,正常显示空格换行,允许单词内换行
  15. LIO-SLAM分析
  16. JavaSE常用类练习
  17. 四个有关文件传输的CTF WEB题(深育杯FakeWget、极客大挑战where_is_my_FUMO、2021陇原战疫CheckIN、N1CTF-curl trick)
  18. 四、点对点的传输层【网络全景图分析系列】
  19. matlab n维插值,简单调研多维插值方法
  20. python程序run不了_无法通过计划程序正确运行Python脚本

热门文章

  1. tryhackme-WindCrop
  2. SQL Server中的LAG函数与LEAD函数介绍
  3. goaccess监控
  4. antdesign图片点击放大_点击图片放大特效代码,全屏显示,再点击恢复原状【多种方法】...
  5. 【梯度下降在波士顿房价预测中的应用】
  6. mysql授权问题:1004 Access denied for user '用户名'@'%' to database
  7. 华为手机无法获取cookie (uniapp) SameSite
  8. c语言抽象数据类型复数,抽象数据类型复数的实现..doc
  9. Python爬虫之selenium对标签页切换、切换frame标签、cookie处理、执行js代码、开启无界面、以及使用代理ip和替换user-agent等方法
  10. Python学习目录