【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 1631 Usaco 2007 Feb. Cow Party
[题解] 最短路裸题.. 本题要求出每个点到终点走最短路来回的距离,因此我们先跑一遍最短路得出每个点到终点的最短距离,然后把边反向再跑一遍最短路,两次结果之和即是答案. #include<cst ...
- 在全局对象(不是指针)的构造函数里不要对std集合做太多操作
写MaxvisionOnvif的时候,我用个宏把每个Command类注册到了CommandBuilder里面,通过全局对象初始化实现的,如下: void CommandBuilder::Registe ...
- Python 3 条件语句
条件语句: 用于判定,判定是否符合某条件,符合则执行,不符合则不执行该条件所定义的操作. 一步判定: 用于理解不会这样使用. if 1==1: if条件判定只能出现一次. print(&q ...
- noip模拟赛 幻灯结界
题目描述59式给你出了一道**题:有n个防御人(守方)还有n个攻击坦克(攻方)每个防御人有护甲a[i],而攻击方每个坦克有火力b[i]如果一个防守方的护甲不小于攻击方的攻击力,就可以防的住然而我们保持 ...
- [TS-A1488][2013中国国家集训队第二次作业]魔法波[高斯消元]
暴力直接解异或方程组,O(n^6)无法接受,那么我们考虑把格子分块,横着和竖着分别分为互不影响的块,这样因为障碍物最多不超过200个,那么块的个数最多为2*(800+200)=2000个,最后用bit ...
- N - Corporate Identity
Beside other services, ACM helps companies to clearly state their “corporate identity”, which includ ...
- [转]十五天精通WCF——第十二天 说说wcf中的那几种序列化
我们都知道wcf是由信道栈组成的,在我们传输的参数走到传输信道层之前,先需要经过序列化的过程,也就是将参数序列化为message,这篇 我们就来说说这里的序列化,蛮有意思的,可能初学者也明白,在wcf ...
- EPEL reporsitory
在centos 5上yum install git的时候报错说没有git这个package. 这是因为centos的软件策略非常保守,因为它基本就是redhat企业版的copy.所以想在centos5 ...
- 高仿京东APP首页“京东快报”自己主动向上滚动的广告条
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] 前言 上次在京东APP上买东 ...
- request.getInputStream() 的两种解析方式
http://sagewsg.iteye.com/blog/1717923 byte[] bytes = new byte[1024 * 1024]; InputStream is; try { is ...