【PostgreSQL】约束-唯一约束

news/2024/7/9 20:43:13 标签: 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 标准定义的实现,其他实现具有不同的行为。因此,在开发旨在实现可移植的应用程序时要小心。


http://www.niftyadmin.cn/n/5301509.html

相关文章

【C++ Primer Plus学习记录】switch语句

假设要创建一个屏幕菜单,要求用户从5个选项中选择一个,例如,便宜、适中、昂贵、奢侈、过度。虽然可以扩展if else if else序列来处理这5种情况,但是C的switch语句能够更容易地从大型列表中进行选择。 下面是switch语句的通用格式…

Flink学习-时间和窗口

在流数据处理应用中,一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”,一 般就是划定的一段时间范围,也就是“时间窗”;对在这范围内的数据进行处理,就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…

c# 循环提速

在C#中,以下是一些方法可以提高循环执行的效率: 使用Dictionary或Hashtable代替List: 当你需要频繁查找元素时, Dictionary或者Hashtable的查找速度通常要比List快。这是因为它们通过哈希码直接访问元素,时间复杂度为…

Redis 键中冒号的用途是什么?可以使匹配查询更快吗?

Redis 键中冒号的用途是什么在Redis中,冒号(:)用作键的分隔符,它的主要作用是创建层次结构和命名空间。通过在键中使用冒号,可以将键分为多个部分,从而更好地组织和管理数据。 以下是冒号在Redis键中的用途…

【sql】_![CDATA[]]_和转义字符:

文章目录 一、转义字符二、<![CDATA[]]>三、<![CDATA[]]>和xml转移字符的关系&#xff0c;它们两个看起来是不是感觉功能重复了&#xff1f; 所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段&#xff08;CDATA section&#xff09;中的文本会被解析器忽略…

三种方式在ASP.NET Core中实现代理功能请求获取数据的接口(以请求百度统计数据接口为例)

一、定义请求数据属性 TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表 //定义属性:TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表public class ToResponseBody{[JsonPropertyName("Target…

Java解决字典序最小回文串

Java解决字典序最小回文串 01 题目 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行 最少 操…

关于标准那些事——第六篇 四象之“朱雀”(要素的表述)

两仪生四象——东方青龙&#xff08;木&#xff09;、西方白虎&#xff08;金&#xff09;、南方朱雀&#xff08;火&#xff09;、北方玄武&#xff08;水&#xff09; 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 要素的表…