【PostgreSQL-9.6.3】约束
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】约束的更多相关文章
- postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改
如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...
- PostgreSQL创建表及约束
创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...
- 浅析postgresql数据库事务及行锁特征
开源数据库领域,postgresql以其优越的性能.功能及良好的稳定性排名首位可谓当之无愧,尤其是对高并发的支持可谓匠心独具.而优越的性能和稳定性,究其根本无非是良好的基础架构,本文将对其性能和稳定性 ...
- Citus 分布式 PostgreSQL 集群 - SQL Reference(创建和修改分布式表 DDL)
创建和分布表 要创建分布式表,您需要首先定义表 schema. 为此,您可以使用 CREATE TABLE 语句定义一个表,就像使用常规 PostgreSQL 表一样. CREATE TABLE ht ...
- Django 3.0的新功能
谷歌翻译的,我修正并且添加了一些内容.凑合看吧. MariaDB的支持 Django现在正式支持MariaDB 10.1和更高版本.有关更多详细信息,请参见MariaDB注释. ASGI支持 Djan ...
- PGSQL基础语句汇总
一.pgsql里面的数据类型不再介绍:https://www.runoob.com/postgresql/postgresql-data-type.html 二.常用基本语句 2.1.CREATE D ...
- 2022年了有哪些值得推荐的.NET ORM框架?
前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...
- 从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理
约束数据表列执行的规则.这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性. 约束可以是列级或表级.仅适用于表级约束被应用到整个表的列级约束.为列定义的数据类型,本身是一 ...
- PostgreSQL的约束
约束类型:检查约束.非空约束.唯一约束.主键.外键 1. 检查约束 设置某个字段里的数值必须满足约束表达式的条件. 例:限制人的年龄在0~120之间,语句如下: create table perso ...
- 外键的约束(Mysql、PostgreSQL)
关于外键是什么,具体不再详述,可以自行百度. 讲一下关于外键的 On Delete和On Update的使用 最近在项目的表中看到这些,不懂顺便查了查: ONSTRAINT "c_clust ...
随机推荐
- BZOJ 1601 USACO 2008 Oct. 灌水
[Description] Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水 ...
- RaspberryPi3安装CentOS7教程
1.准备 Centos 7 AMR版镜像下载地址: http://mirror.centos.org/altarch/7/isos/armhfp/ 下载得到:CentOS-Userland-7-arm ...
- NOI2017爆零记[AFO]
WC2017 12分……全省第一…… APIO2017 4分……全省第二…… 千言万语汇成两个表格 NOI2017 114分(笔试100+一试4+二试5+A类5)……全省第三…… 全场最菜…… day ...
- [HDU2328]Corporate Identity(后缀数组)
传送门 求 n 个串的字典序最小的最长公共子串. 和 2 个串的处理方法差不多. 把 n 个串拼接在一起,中间连上一个没有出现过的字符防止匹配过界. 求出 height 数组后二分公共子串长度给后缀数 ...
- mbr gpt
超过2T硬盘的磁盘要用gpt格式,准确地说,应该是分区超过2T地硬盘要选用GPT模式. 做个小推广:程序员经常久坐,颈椎毛病比较多,特别推荐ventry颈椎保健枕
- codevs——T1214 线段覆盖
http://codevs.cn/problem/1214/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ...
- Java 和JS Base64加密
项目在登录.注册等场景实现时,经常会用到用户信息前端加密,然后项目后端二次解密,避免信息直接在浏览器上以明文显示. 本文主要介绍了base64加密的方式处理代码,不支持中文 源码如下: base64. ...
- 机器学习10k均值
下面介绍无监督机器学习算法,与前面分类回归不一样的是,这个不知道目标变量是什么,这个问题解决的是我们从这些样本中,我们能发现什么. 这下面主要讲述了聚类算法,跟数据挖掘中的关联挖掘中的两个主要算法. ...
- objective-c中@class和#import
objective-c中@class和#import #import "B.h" @interface A :NSObject { B *b; } @end @class 通常引入 ...
- Codeforces Round #250 Div. 2(C.The Child and Toy)
题目例如以下: C. The Child and Toy time limit per test 1 second memory limit per test 256 megabytes input ...