PostgreSQL的约束


前言

PostgreSQL在MySQL的基础上多了CHECK约束和EXCLUSION 约束。


一、检查约束(CHECK 约束)

CHECK 约束保证列中的所有值满足某一条件,即对输入一条记录要进行检查。如果条件值为 false,则记录违反了约束,且不能输入到表。

例如:学生表中,设置age字段,要求age必须大于0.

CREATE TABLE student(
   student_id 	  INT PRIMARY KEY NOT NULL,
   name           TEXT    NOT NULL,
   age            INT     CHECK(age > 0)
);

设置表约束,要求电话号与学号相同。

CREATE TABLE student(
   student_id 	  INT PRIMARY KEY NOT NULL,
   name           TEXT    NOT NULL,
   age            INT     CHECK(age > 0), #列约束
   tel 			  char(11) NOT NULL ,
   stu_num		  char(11) NOT NULL ,
   CHECK (tel = stu_num) #表约束
);

二、排他约束(EXCLUSION 约束)

EXCLUSION 约束确保如果使用指定的运算符在指定列或表达式上比较任意两行,至少其中一个运算符比较将返回 false 或 null。

CREATE TABLE student(
   sutdent_id     INT PRIMARY KEY NOT NULL,
   name           TEXT,
   age            INT  ,
   address        CHAR(50),
   EXCLUDE USING gist
   (name WITH =,  -- 如果满足 name 相同,age 不相同则不允许插入,否则允许插入
   age WITH <>)   -- 其比较的结果是如果整个表边式返回 true,则不允许插入,否则允许
);

通过插入语句确认排他约束的含义。

INSERT INTO student VALUES(1, 'lmz', 22, '东路');
INSERT INTO student VALUES(2, 'lmz', 22, '南路');
-- 此条数据的 NAME 与第一条相同,且 AGE 与第一条也相同,故满足插入条件
INSERT INTO COMPANY7 VALUES(3, 'lmz', 42, '北路');
-- 此数据与上面数据的 NAME 相同,但 AGE 不相同,故不允许插入

非空约束(NOT NULL 约束)

默认情况下,列可以保存为 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。

NULL 与没有数据是不一样的,它代表着未知的数据。

CREATE TABLE student(
   student_id 	  INT NOT NULL,
   name           TEXT    NOT NULL,
);

唯一约束(UNIQUE 约束)

UNIQUE 约束可以设置列是唯一的,避免同一列出现重复值。

CREATE TABLE student(
   student_id 	  INT NOT NULL,
   name           TEXT    NOT NULL,
   stu_num		  char(11) NOT NULL UNIQUE
);

主键约束(PRIMARY KEY)

在设计数据库时,PRIMARY KEY 非常重要。

PRIMARY KEY 称为主键,是数据表中每一条记录的唯一标识。

设置 UNIQUE 的列可能有多个,但是一张表只有一列可以设置 PRIMARY KEY。

我们可以使用主键来引用表中的行,也可以通过把主键设置为其他表的外键,来创建表之间的关系。

主键是非空约束和唯一约束的组合。

一个表只能有一个主键,它可以由一个或多个字段组成,当多个字段作为主键,它们被称为复合键。

如果一个表在任何字段上定义了一个主键,那么在这些字段上不能有两个记录具有相同的值。

外键约束(FOREIGN KEY 约束)

FOREIGN KEY 即外键约束,指定列(或一组列)中的值必须匹配另一个表的某一行中出现的值。

通常一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键),即维护了两个相关表之间的引用完整性。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值