2019独角兽企业重金招聘Python工程师标准>>>

PostgreSQL常见约束有检查约束、非空约束、唯一约束、主键约束和外键约束等,部分约束类型还可以指定多列,指定多列本文不介绍过多,请参考PostgreSQL数据库手册。下文将一一详加介绍。

首先我们介绍检查约束。检查约束要求数据必须满足某些条件,例如数值必须大于或小于某些值,或在某字段等。

---创建员工信息表
---性别值为0或1
create table "workerInformation"(workerid int,"workerName" varchar(30),"workerBirthday" date,"workerSex" int check ("workerSex"=0 or "workerSex"=1)
);#CREATE TABLE#Query returned successfully in 139 msec.

下面我们尝试插入正常数据。

insert into "public"."workerInformation"(workerid,"workerName","workerBirthday","workerSex") values(1,'顾留芳','0670-1-1',1);
insert into "public"."workerInformation"(workerid,"workerName","workerBirthday","workerSex") values(2,'林业平','0770-1-1',1);

下面插入错误数据,需要指出表中某列名有大小写等特殊情况需要表名加英文双引号""。

insert into "public"."workerInformation"(workerid,"workerName","workerBirthday","workerSex") values(3,'徐长卿','0770-1-1',2);
#ERROR:  new row for relation "workerInformation" violates check constraint  "workerInformation_workerSex_check"
#DETAIL:  Failing row contains (3, 徐长卿, 0770-01-01, 2).
#SQL 状态:23514

数据库有如上错误提示,下面修改为正确数据。

insert into "public"."workerInformation"(workerid,"workerName","workerBirthday","workerSex") values(3,'徐长卿','0865-1-1',1);

); 数据插入成功。

下面介绍非空约束。非空约束很容易理解,就是要求数据不能为空,列内需要有数据。声明非空列使用关键字 not null (或 NOT NULL)。

先创建表。

CREATE TABLE products ("productNO" integer NOT NULL,name text NOT NULL,price numeric
);

插入正常数据

INSERT INTO "public".products VALUES(1,'统一老坛酸菜牛肉面',3.6);
INSERT INTO "public".products VALUES(2,'',2);

插入如下错误数据

INSERT INTO "public".products VALUES(2,,2);

软件会提示错误,插入允许为空数据时,该列值需要声明值为NULL,否则软件也会提示错误。

接上文代码,连续多次执行代码

---执行2以上
INSERT INTO "public".products VALUES(3,'',2);

执行查询语句

SELECT * FROM "public".products;

会发现有多行相同数据。

删除原表并新建新表。

---"productNO"唯一约束
CREATE TABLE products ("productNO" integer UNIQUE,name text,price numeric
);

执行测试代码。

---执行2以上
INSERT INTO "public".products VALUES(3,'',2);

第一次正常执行代码后,第二次执行代码软件会产生错误信息。

#ERROR:  duplicate key value violates unique constraint "products_productNO_key"
#DETAIL:  Key ("productNO")=(3) already exists.
#SQL 状态:23505

主键约束,顾名思义就是指定主键。

再次删除测试表products。创建新表并创建主键productNO。

---"productNO"创建主键productNO
CREATE TABLE products ("productNO" integer UNIQUE PRIMARY KEY,name TEXT,price NUMERIC
);

唯一约束是指当前列不能有重复值。

---创建表并设置"productNO" 列唯一约束
CREATE TABLE products ("productNO" integer NOT NULL UNIQUE,name text NOT NULL,price numeric
);
---另一种唯一约束写法
CREATE TABLE products ("productNO" INTEGER NOT NULL,name TEXT NOT NULL,price NUMERIC,UNIQUE("productNO")
);
---先创建表
CREATE TABLE products ("productNO" INTEGER NOT NULL,name TEXT NOT NULL,price NUMERIC
);
---后设置约束
ALTER TABLE "public"."products" ADD UNIQUE("productNO");

外键约束就是指某一列必须匹配另一个表某列,用于维持两个关联表数据完整性。删除表需要先删除引用表,再删除被引用表。

创建有外键表orders 。

---创建订单表orders
CREATE TABLE orders ("orderID" integer PRIMARY KEY,"productNO" integer REFERENCES products ("productNO"),quantity integer
);

插入错误值后错误信息如下:

---产品编号为3商品不存在
INSERT INTO "public".orders VALUES(1,3,1);#ERROR:  insert or update on table "orders" violates foreign key constraint "orders_productNO_fkey"
#DETAIL:  Key (productNO)=(3) is not present in table "products".
#SQL 状态:23503

改成正确信息后

INSERT INTO "public".orders VALUES(1,2,1);

数据库脚本执行成功。

转载于:https://my.oschina.net/u/1011130/blog/1558073

PostgreSQL数据库日常学习笔记13-约束相关推荐

  1. SQL数据库教程-学习笔记2

    SQL数据库教程-学习笔记2 文章目录 SQL数据库教程-学习笔记2 三.DML语言的学习 1.插入语句:insert into 2.修改语句:update 3.删除语句:delete 4.练习题 四 ...

  2. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  3. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  4. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  5. 数据库的学习笔记(一)

    简述: 本篇是数据库的学习笔记,仅供自己学习使用. 本文初发于 "曾晨de小站" zengchen233.cn,同步转载于此. 数据库和表的基本操作(一) 如何在指定数据库中创建表 ...

  6. 数据库MySQL学习笔记高级篇(周阳)

    数据库MySQL学习笔记高级篇 1. mysql的架构介绍 mysql简介 高级Mysql mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...

  7. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  8. Android:日常学习笔记(8)———探究UI开发(2)

    Android:日常学习笔记(8)---探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

  9. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)--探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  10. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

最新文章

  1. 连接服务器_命令行连接FTP服务器
  2. 运行Python的三种方法
  3. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)
  4. uburntu在不能自动获取网络时的联网设置
  5. MyEclipse中使用Proxool+mysql连接池的方法
  6. Android AsyncTask源码解析
  7. img标签过滤加fs模块实现图片文件缓存
  8. Silverlight学习之贪吃蛇游戏
  9. tcp云服务器连接,云服务器可以tcp通讯吗
  10. FusionCharts破解方法
  11. 国际国内cms系统开源网址大综合
  12. 他说,我可能以后不干安全了
  13. 强大的 Fresco(加载网络和本地图片)简单使用
  14. Brainfuck与Ook!编程语言解析与解密
  15. "中国东信杯"广西大学第二届程序设计竞赛(同步赛)
  16. win10任务栏卡死桌面正常的解决方法
  17. CLIP:多模态领域革命者
  18. 搜狗 2018校招 商业基础工程—测试开发工程师练习题
  19. “淘宝” 开放平台接口设计思路
  20. SQLZOO总结3-5

热门文章

  1. php5.4 eregi,帮助将PHP eregi转换为preg_match
  2. 卡饭论坛--金山毒霸/卫士 广告过滤规则(附纯文本版) [2015.7.1] 党生日版
  3. 王可欣作业一 统计软件简介与数据操作
  4. 2.2析取范式与合取范式
  5. F1, 中位数,四分位距IQR等指标的统计检验
  6. 开源基础软件大时代,与国产深度学习框架一起乘风破浪
  7. lpx寒假作业案例15
  8. 不再害怕打字慢(python信息轰炸)
  9. 喝咖啡有什么好处和坏处?
  10. 什么是前台?什么是中台?什么是后台?