当前位置:   article > 正文

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)
);
  • 1
  • 2
  • 3
  • 4
  • 5

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

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) #表约束
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

二、排他约束(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,则不允许插入,否则允许
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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 不相同,故不允许插入
  • 1
  • 2
  • 3
  • 4
  • 5

非空约束(NOT NULL 约束)

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

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

CREATE TABLE student(
   student_id 	  INT NOT NULL,
   name           TEXT    NOT NULL,
);
  • 1
  • 2
  • 3
  • 4

唯一约束(UNIQUE 约束)

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

CREATE TABLE student(
   student_id 	  INT NOT NULL,
   name           TEXT    NOT NULL,
   stu_num		  char(11) NOT NULL UNIQUE
);
  • 1
  • 2
  • 3
  • 4
  • 5

主键约束(PRIMARY KEY)

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

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

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

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

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

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

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

外键约束(FOREIGN KEY 约束)

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/606082
推荐阅读
相关标签
  

闽ICP备14008679号