【PostgreSQL】约束-唯一约束

【PostgreSQL】约束链接

检查
唯一
主键
外键
排他

唯一约束

唯一约束是数据库中的一种约束,用于确保某个列或字段的值在该列或字段中是唯一的。唯一约束可用于确保数据库表中的某个列中的值是唯一的,也可用于确保多个列的组合值是唯一的。

在创建表时,可以通过在列的定义中添加UNIQUE关键字来创建唯一约束。唯一约束可以防止在表中插入重复的值,并确保每个值在该列中只出现一次。

例如,创建一个名称为students的表,并在该表的学号(ID)列上添加唯一约束,可以使用以下SQL语句:

CREATE TABLE students ( ID int UNIQUE, Name varchar(50), Age int, Gender char(1) );

在上述示例中,唯一约束被应用于ID列,表示在该列中的值必须是唯一的。

当尝试向该表中插入一个已经存在的值时,将会引发唯一约束冲突的错误。

PostgreSQL 唯一约束

唯一约束可确保一列或一组列中包含的数据在表中的所有行中是唯一的。语法为:

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 example (
    a integer,
    b integer,
    c integer,
    UNIQUE (a, c)
);

这指定了指示列中的值组合在整个表中是唯一的,尽管其中任何一列都不需要(通常也不是)唯一的。

您可以按常规方式为唯一约束指定自己的名称:

CREATE TABLE products (
    product_no integer CONSTRAINT must_be_different UNIQUE,
    name text,
    price numeric
);

添加唯一约束将自动在约束中列出的列或列组上创建唯一的 B 树索引。仅涵盖某些行的唯一性限制不能写为唯一约束,但可以通过创建唯一部分索引来强制实施此类限制。

通常,如果表中有多个行,且约束中包含的所有列的值相等,则违反唯一约束。默认情况下,在此比较中,两个 null 值不被视为相等。这意味着,即使存在唯一约束,也可以将包含 null 值的重复行存储在至少一个受约束列中。可以通过添加子句来更改此行为,例如NULLS NOT DISTINCT

CREATE TABLE products (
    product_no integer UNIQUE NULLS NOT DISTINCT,
    name text,
    price numeric
);

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    UNIQUE NULLS NOT DISTINCT (product_no)
);

可以使用NULLS DISTINCT显式指定缺省行为。唯一约束中的默认 null 处理是根据 SQL 标准定义的实现,其他实现具有不同的行为。因此,在开发旨在实现可移植的应用程序时要小心。

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA圈小圈

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值