约束类型:检查约束、非空约束、唯一约束、主键、外键

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的约束的更多相关文章

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

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

  2. postgresql 唯一约束增强

    http://blog.chinaunix.net/uid-15145533-id-2775821.html

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

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

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

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

  5. PostgreSQL创建表及约束

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

  6. postgresql 用 like 可以 复制结构包括主键约束

    create tabletablename ( like tablename INCLUDING INDEXES INCLUDING COMMENTS); PostgreSQL 动态表复制(CREAT ...

  7. PostgreSQL介绍以及如何开发框架中使用PostgreSQL数据库

    最近准备下PostgreSQL数据库开发的相关知识,本文把总结的PPT内容通过博客记录分享,本随笔的主要内容是介绍PostgreSQL数据库的基础信息,以及如何在我们的开发框架中使用PostgreSQ ...

  8. postgresql 导出数据字典文档

    项目上需要整理目前数据库的数据字典文档.项目不规范,这种文档只要后期来补.这么多张表,每个字段都写到word文档里真心头大.就算前面写了个查询表结构的sql,但是最后整理到word里还是感觉有点麻烦. ...

  9. SQLite vs MySQL vs PostgreSQL:关系型数据库比较

    自1970年埃德加·科德提出关系模型之后,关系型数据库便开始出现,经过了40多年的演化,如今的关系型数据库种类繁多,功能强大,使用广泛.面对如此之多的关系型数据库,我们应该如何权衡找出适合自己应用场景 ...

随机推荐

  1. 如何保留小数点后N位?

    2014年10月17日09:48:39 在做项目中遇到的,要把想显示的数据进行规定小数位的保留,下面写一下用过的方法: 1. BigDecimal 方法(我做项目的时候用的方法) 代码: java.m ...

  2. html常用代码

    <marquee width="70%" scrollamount="2">大家好</marquee>    // 大家好 字符从左到右 ...

  3. TSV 与 CSV

    TSV : Tab-separated values 用制表符分隔值. CSV : Comma-separated values 用逗号分隔值. 参考 RFC 4180 - Common Format ...

  4. display:inline-block在IE6/Ie7和IE8中的区别

    在IE6.IE7中不识别display:inline-block属性,但使用inline-block属性在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表 ...

  5. 按回车键切换input鼠标光标

    function focue(){ if(event.keyCode==13){//回车键的键值13 event.keyCode=9;//tab键的键值9 } }

  6. svn没有权限检出项目

    解决方法 鼠标右键,svn,setings

  7. 每天一个linux常用命令--ls 和 -ll 有什么区别?

    一.-ls 和 -ll  有什么区别? 1. ls 命令可以说是linux下最常用的命令之一.ll不是命令,是ls -l的别名相当于windows里的快捷方式.所以"ll"和“ls ...

  8. 【读书笔记】:MIT线性代数(4):Independence, Basis and Dimension

    Independence: The columns of A are independent when the nullspace N (A) contains only the zero vecto ...

  9. python系列——文件操作的代码

    import numpy as np import os,sys #获取当前文件夹,并根据文件名 def path(fileName): p=sys.path[0]+'\\'+fileName ret ...

  10. IntelliJ Idea 环境搭建

    安装IntelliJ Idea 可以去官网下载: https://www.jetbrains.com/idea/download/#section=windows 选择Ultimate.一路下一步安装 ...