Postgresql 约束(constraint)

本文详细解析了SQL中的各类约束,包括检查约束、非空约束、唯一约束、主键、外键和排他约束。通过具体示例,展示了如何在创建表时应用这些约束,确保数据的完整性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明:以下内容看完文档仅个人理解,仅供参考,详见下方参考资料。

约束(constraint)

约束分为检查约束(Check Constraints)、非空约束(Not-Null Constraints)、唯一约束(Unique Constraints)、主键(Primary Keys)、外键(Foreign Keys)、排他约束(Exclusion Constraints)。所有约束都可以成为命名约束,创建时带constraint 关键字。

检查约束如:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0)
);

也可以加命名约束:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CONSTRAINT positive_price CHECK (price > 0)
);

列约束与表约束:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0), # 列约束
    discounted_price numeric CHECK (discounted_price > 0), #列约束
    CHECK (price > discounted_price) #表约束
);

非空约束:

CREATE TABLE products (
    product_no integer NOT NULL,
    name text NOT NULL,
    price numeric NOT NULL CHECK (price > 0)
);

唯一约束:

#列约束写法
CREATE TABLE products (
    product_no integer UNIQUE,
    name text,
    price numeric
);
#表约束写法
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    UNIQUE (product_no)
);

主键约束

一个主键约束表示可以用作表中行的唯一标识符的一个列或者一组列。这要求那些值都是唯一的并且非空。因此,下面的两个表定义接受相同的数据:

CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);

主键也可以包含多于一个列,其语法和唯一约束相似:

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);

增加一个主键将自动在主键中列出的列或列组上创建一个唯一B-tree索引。并且会强制这些列被标记为NOT NULL。
一个表最多只能有一个主键(可以有任意数量的唯一和非空约束,它们可以达到和主键几乎一样的功能,但只能有一个被标识为主键)。

外键
这个在实际生产中应用很少,外键得作用里边不会出现冗余数据,有外键得表依赖被引用得表,外键约束得那一列,必须都是被引用表存在得值,如果不存在,或者对主表操作删除时,外键都会起到级联删除或者由于外键得作用无法操作。

排他约束
排他约束保证如果将任何两行的指定列或表达式使用指定操作符进行比较,至少其中一个操作符比较将会返回否或空值。
详见:http://www.postgres.cn/docs/12/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

参考资料

https://www.postgresql.org/docs/12/ddl-constraints.html
http://www.postgres.cn/docs/12/ddl-constraints.html
http://www.postgres.cn/docs/12/sql-createtable.html#SQL-CREATETABLE-EXCLUDE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值