PostgreSQL的约束
约束类型:检查约束、非空约束、唯一约束、主键、外键
1. 检查约束
设置某个字段里的数值必须满足约束表达式的条件。
例:限制人的年龄在0~120之间,语句如下:
create table person(name
varchar(40),age int check (age >=0 and age<=120));
insert into person values('name1',120);
insert into person values('name1',121);
执行结果如下,年龄字段超过120报错,提示受“person_age_check”的限制。

指定约束的名称,需要使用关键词“constraint”,示例如下
create table person(name
varchar(40),age int constraint age_chk check
(age >=0 and age<=120));
一个检查约束可以引用多个列,例如:存储商品平常价格和打折价格,而打折价格低于平常价格,示例如下
create table products (
product_no integer,
name text,
price numeric check (price > 0),
dazhe_price numeric check (dazhe_price > 0),
constraint dazhe_price_chk check (price >dazhe_price)
);
在上面的例子中,针对价格(price > 0)和打折后价格(dazhe_price > 0)的约束称为列约束,这两个约束依附于特定的列,但第三个约束(price >dazhe_price)独立于任何一个列定义,称为表约束。
执行结果如下:

注:oracle下,检查约束可以禁用,但在PostgreSQL下却不可以禁用。
2. 非空约束
非空约束仅仅指定一个列中不会有空值。非空约束等价于检查约束(column_name is not null)。示例如下:
create table products (
product_no integer,
name text,
price numeric not null,
dazhe_price numeric check (dazhe_price > 0),
constraint dazhe_price_chk check (price >dazhe_price)
);
3. 唯一约束
唯一约束保证在一列或一组列中保存的数据是唯一值,示例如下:
create table products (
product_no integer UNIQUE,
name text,
price numeric
);
为一组列定义一个唯一约束,示例如下:
create table products (
product_no integer,
name text,
price numeric,
UNIQUE(product_no, price)
);
为唯一约束指定名称:
create table products (
product_no integer CONSTRAINT pro_no_unique
UNIQUE,
name text,
price numeric
);
PostgreSQL的约束的更多相关文章
- 从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理
约束数据表列执行的规则.这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性. 约束可以是列级或表级.仅适用于表级约束被应用到整个表的列级约束.为列定义的数据类型,本身是一 ...
- postgresql 唯一约束增强
http://blog.chinaunix.net/uid-15145533-id-2775821.html
- postgresql数据库primary key约束/not null约束/unique约束及default值的添加与删除、列的新增/删除/重命名/数据类型的更改
如果在建表时没有加primary key约束.not null约束.unique约束.default值,而是创建完表之后在某个字段添加的话 1.primary key约束的添加与删除 给red_pac ...
- 外键的约束(Mysql、PostgreSQL)
关于外键是什么,具体不再详述,可以自行百度. 讲一下关于外键的 On Delete和On Update的使用 最近在项目的表中看到这些,不懂顺便查了查: ONSTRAINT "c_clust ...
- PostgreSQL创建表及约束
创建表 语法: create table table_name ( column_name type column_constraint, table_constraint table_constra ...
- postgresql 用 like 可以 复制结构包括主键约束
create tabletablename ( like tablename INCLUDING INDEXES INCLUDING COMMENTS); PostgreSQL 动态表复制(CREAT ...
- PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库
最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...
- postgresql 导出数据字典文档
项目上需要整理目前数据库的数据字典文档.项目不规范,这种文档只要后期来补.这么多张表,每个字段都写到word文档里真心头大.就算前面写了个查询表结构的sql,但是最后整理到word里还是感觉有点麻烦. ...
- SQLite vs MySQL vs PostgreSQL:关系型数据库比较
自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...
随机推荐
- BUUCTF | 摩丝
将得到的交上去居然不对: 然而大写却过了: flag{ILOVEYOU} 因为摩斯电码在设计的时候就没有区分大小写,而且从码表中可以看到,都是大写,所以在网站上解密出来的自己转成大写
- 20175203 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
20175203 2018-2019-2 实验一<Java开发环境的熟悉> 实验内容及步骤 使用JDK编译.运行简单的Java程序 此代码较为基础,主要是为了让我们熟悉JDK编程环境及如何 ...
- 关于css3 Animation动画
在介绍animation之前有必要先来了解一个东西,那就是“keyframes”,我们把他叫做“关键帧”: 在使用transition制作一个简单的transition效果时,包括了初始属性,最终属性 ...
- Nginx代理与反向代理、负载均衡实践
通过 Nginx 提供的反向代理和负载均衡功能,可以合理的完成业务的分配,提高网站的处理能力;同时利用缓存功能,还可以将不需要实时更新的动态页面输出结果,转化为静态网页形成缓存,从而提高网站的响应速度 ...
- jQuery判断checkbox是否选中及获取选中值
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...
- nginx 设置http访问ftp目录内文件
设置 nginx “403 Forbidden” 错误的原因及解决办法 原文链接 https://www.cnblogs.com/chenzc/p/4461130.html nginx 的 403 F ...
- Java GC算法
转自:http://blog.csdn.net/heyutao007/article/details/38151581 1.JVM内存组成结构 JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,结 ...
- htmlspecialchars_decode 解决掉 &
如果在请求中返回的内容包含 & 请使用htmlspecialchars_decode 搞一下,去掉. 这个纯粹为自己怕到时又找不到这个方法
- [fw]LINUX中断描述符初始化
LINUX中断描述符初始化 @CopyLeft by ICANTH,I Can do ANy THing that I CAN THink!~ Author: WenHui, WuHan Univer ...
- hdu3555 Bomb(数位dp)
题目传送门 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total ...