PostgreSQL中的约束有以下五种:主键约束、外键约束、非空约束、唯一性约束、默认约束。下面分别对这五种约束作说明。

一、主键约束(PrimaryKey Constraint)

主键约束要求主键列中的数据非空且唯一,也就是说主键约束其实已经含有非空、唯一性两种约束。主键能够唯一标识数据表中的一

行记录,可以配合外键来定义不

同表之间的关系,并提高查询速度。主键分为两种类型:单字段主键和多字段联合主键。

1.单字段主键

主键由一个字段组成,SQL语句中可以有两种定义格式:

(1)在定义列的同时定义主键

column_name type primary key

如创建表test,定义id列为主键:

createtable test (

id int primary key,

first_name varchar2(10),

job varchar2(15)

);

(2)在定义完所有列后定义主键,即表级别定义主键

[constraintconstraint_name] primary key (column_name)

如创建表test,定义id列为主键:

createtable test (

id int,

first_name varchar2(10),

job varchar2(15),

primarykey (id)

);

2.多字段联合主键

主键由多个字段组合而成,SQL格式如下:

primarykey [column1,column2,column3…]

如创建表test,定义id,first_name列为主键:

createtable test (

id int,

first_name varchar2(10),

job varchar2(15),

primarykey (id,first_name)

);

二、外键约束(ForeignKey Constraint)

外键用来连接两张表,可以是一列或者多列,同一张表中可以有一个或者多个外键。外键可以为空值,但只要不为空,它的值就是主

表里面的主键。主键所在的表称

为主表,或者父表;外键所在的表称为从表,或者子表。外键的创建语句格式为:

[constraint<外键名>]foreign key column1 [column2,column3…]

references<主表名>主键列1,[主键列2,主键列3…]

如创建表test1,定义id1列为外键,参照test2表的主键列id2:

createtable test (

id1 int,

first_name varchar2(10),

job varchar2(15),

constraintfk_test2_id2 foreign key (id1) references test2 (id2)

);

三、非空约束(NotNull Constraint)

非空约束,顾名思义指字段的值不能为空,当向定义了非空约束的列插入空值时,数据库会报错。非空约束的定于语句为:

column_name type not null

如定义test表的id列为非空:

createtable test (

id int not null,

first_name varchar2(10),

job varchar2(15)

);

四、唯一性约束(UniqueConstraint)

唯一性约束要求所在列的值不能重复,并且最多出现一个空值。唯一性约束可以指定一列或者多列的唯一性。

1.定义列的同时定义唯一性约束

column_name type unique

如创建表test,定义id列为唯一:

createtable test (

id int unique,

first_name varchar2(10),

job varchar2(15)

);

2.在定义完所有列以后指定唯一约束

[constraint<constraint_name>] unique (column_name)

如创建表test,定义id列为唯一:

createtable test (

id int ,

first_name varchar2(10),

job varchar2(15)

constraintU_id unique (id)

);

五、默认约束(DefaultConstraint)

默认约束,即为指定列定义默认值,当向表中插入一条记录,即使被定义列没有被赋值,数据库也会给这个列赋予一个之前定义的默

认值。

column_name type default default_value

如创建表test,定义列id的默认值为00:

如创建表test,定义id列为唯一:

createtable test (

id int default 00,

first_name varchar2(10),

job varchar2(15)

);

【PostgreSQL-9.6.3】约束的更多相关文章

  1. postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改

    如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...

  2. PostgreSQL创建表及约束

    创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...

  3. 浅析postgresql数据库事务及行锁特征

    开源数据库领域,postgresql以其优越的性能.功能及良好的稳定性排名首位可谓当之无愧,尤其是对高并发的支持可谓匠心独具.而优越的性能和稳定性,究其根本无非是良好的基础架构,本文将对其性能和稳定性 ...

  4. Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)

    创建和分布表 要创建分布式表,您需要首先定义表 schema. 为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样. CREATE TABLE ht ...

  5. Django 3.0的新功能

    谷歌翻译的,我修正并且添加了一些内容.凑合看吧. MariaDB的支持 Django现在正式支持MariaDB 10.1和更高版本.有关更多详细信息,请参见MariaDB注释. ASGI支持 Djan ...

  6. PGSQL基础语句汇总

    一.pgsql里面的数据类型不再介绍:https://www.runoob.com/postgresql/postgresql-data-type.html 二.常用基本语句 2.1.CREATE D ...

  7. 2022年了有哪些值得推荐的.NET ORM框架?

    前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...

  8. 从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理

    约束数据表列执行的规则.这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性. 约束可以是列级或表级.仅适用于表级约束被应用到整个表的列级约束.为列定义的数据类型,本身是一 ...

  9. PostgreSQL的约束

    约束类型:检查约束.非空约束.唯一约束.主键.外键 1.  检查约束 设置某个字段里的数值必须满足约束表达式的条件. 例:限制人的年龄在0~120之间,语句如下: create table perso ...

  10. 外键的约束(Mysql、PostgreSQL)

    关于外键是什么,具体不再详述,可以自行百度. 讲一下关于外键的 On Delete和On Update的使用 最近在项目的表中看到这些,不懂顺便查了查: ONSTRAINT "c_clust ...

随机推荐

  1. yum更换国内源及yum下载rpm包

    一.yum更换国内源 运维开发技术交流群欢迎大家加入一起学习(QQ:722381733) 1.前往yum文件路径地址 [root@web1 ~]# cd /etc/yum.repos.d/ [root ...

  2. Python基础-判断闰年

    输入一个年份,判断该年份是否是闰年并输出结果.求它是否是闰年?要求:能被4整除不能被100整除或者能被400整除. y=input('请输入年份:') if(y%4==0 and y%100 != 0 ...

  3. oi的小转折

    2018.6.4,衡水中学oier——Yu-shi,真正的走入了外网领域. 从最开始的连scanf都不打取地址,到现在懂了好多以前不敢去看的东西,心态逐渐的成长了.也许有过特别迷茫的时候,也许将来会有 ...

  4. Leetcode 42.接雨水

    接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下 ...

  5. Performance Metrics(性能指标1)

    Performance Metrics(性能指标) 在我们开始旅行本书之前,我必须先了解本书的性能指标和希望优化后的结果,在第二章中,我们探索更多的性能检测工具和性能指标,可是,您得会使用这些工具和明 ...

  6. java web解决表单重复提交

    首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么情况下会出现表单重复提交?3.什么情况需要避免表单重复提交? 什么叫表单提交问题,说白了,就是同一份信息,重 ...

  7. Oracle数据库点滴

    分页查询: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)W ...

  8. 完全卸载VS2013的方法

    解压安装包的ISO文件,然后进入到根目录运行命令行: vs_ultimate.exe /uninstall /force 注意:比如ISO是Update 5的,那么卸载的只能是Update 5安装的内 ...

  9. Android:开机自启动并接收推送消息

    接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html. 首先是开机自启动的功能实现,代码如下:1.     ...

  10. pthread_rwlock pthread读写锁

    原文: http://www.cnblogs.com/diegodu/p/3890450.html 使用读写锁 配置读写锁的属性之后,即可初始化读写锁.以下函数用于初始化或销毁读写锁.锁定或解除锁定读 ...