• 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(唯一约束的键),即维护了两个相关表之间的引用完整性。

  • 相关阅读:
    Requests 与接口请求构造
    angular:html2canvas对ion-avatar节点渲染不正确
    Linux之管道、环境变量与常用命令
    基于MatLab实现LSB(最低有效位)算法完成图片数字水印隐写功能
    HGH30CA、HGH30HA、HGH35CA、HGH35HA、HGH45HA等可以替换吗?
    CCF CSP认证 历年题目自练Day37
    使用 Microchip SAM9X60 OTP 存储板卡的MAC地址和序列号
    你知道HTTP与HTTPS有什么区别吗?
    阿里这份Github星标63.7K的Redis高级笔记简直不要太细,看到就是赚到。
    Vue基础入门超基础。
  • 原文地址:https://blog.csdn.net/qq_45722267/article/details/125530710