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. MongoDB - 认识MongoDB及数据类型

    目录 MongoDB - 认识MongoDB及数据类型 启动 MogoDB的数据 MogoDB的数据类型 1.Object ID : Documents自生成的_id 2.string : 字符串,必 ...

  2. 2017沈阳网络赛hdu6199 gems gems gems

    gems gems gems Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) P ...

  3. noip模拟赛 赤の夜

    题目背景 下发压缩包链接: https://pan.baidu.com/s/1geC4ooz 密码: 3vpt(同T1) 正在想这么说的时候—— 突然涌出一种强烈的晕眩感. 这是,什么……? 眼花吗? ...

  4. 树网的核(codevs 1167)

    题目描述 Description [问题描述]设 T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T 为树网(treenetwork),其中V, E分别表 ...

  5. 草草弄完SPRING WEB-FLOW

    明天白天再慢慢看原理吧. 今天先把代码实习一次. 作作截图存照.

  6. CentOS的free命令

    https://blog.csdn.net/for_tech/article/details/53044610 https://www.58jb.com/html/145.html

  7. redo allocation latch redo copy latch

    这两个latch 是干什么的一直有点迷糊,刚才上网查了一下,总结如下: redo allocation latch 在Log Buffer中分配内存空间时需要获取Redo allocation lat ...

  8. firdac支持的序列和还原格式

    TFDStorageFormat = (sfAuto, sfXML, sfBinary, sfJSON); FIREDAC支持3种序列格式:XML,JSON和BIN.

  9. [Angular] Why should we using Protal

    Origianl article Protal from Angular CDK, is a way to create dynammic component. Consider an example ...

  10. Xposed获取微信usernamepassword

    请关注我的微信公众号 參考文章:Xposed恶意插件 Android 安全专项-Xposed 劫持usernamepassword实践 0x00 我在之前的文章中演示了一下怎样通过Xposed获取us ...