PostgreSQL - 约束条件

PostgreSQL - 约束条件 首页 / PostgreSQL入门教程 / PostgreSQL - 约束条件

约束是对表的数据列强制执行的规则,这些用于防止将无效数据输入数据库,这样可以确保数据库中数据的准确性和可靠性。

以下是PostgreSQL中可用的常用约束。

  • NOT NULL Constraint     - 确保值不能为空

  • UNIQUE Constraint          -  确保值唯一

  • PRIMARY Key                     -  数据库唯一主键标识。

  • FOREIGN Key                     - 表外键

  • CHECK Constraint             - CHECK约束确保列中的所有值都满足特定条件。

  • EXCLUSION Constraint   - EXCLUDE约束确保运算符在指定的列或表达式上进行比较任何两行,则并非所有这些比较都将返回TRUE。

NOT NULL 约束

默认情况下,列可以包含NULL值。如果您不希望某列具有NULL值,则需要在此列上定义此类约束,以指定该列现在不允许NULL。 

如,下面的PostgreSQL语句创建一个名为COMPANY1的新表,并添加五列,其中三列(ID,NAME和AGE)指定不接受NULL值-

CREATE TABLE COMPANY1(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

UNIQUE 约束

UNIQUE约束可防止两个记录在特定列中具有相同的值,例如,在COMPANY表中,您可能要防止两个或两个以上的人具有相同的年龄。

如,以下PostgreSQL语句创建一个名为COMPANY3的新表并添加五列,在这里,AGE列设置为UNIQUE,因此您不能拥有两个具有相同年龄的记录-

CREATE TABLE COMPANY3(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL UNIQUE,
   ADDRESS        CHAR(50),
   SALARY         REAL    DEFAULT 50000.00
);

PRIMARY KEY 约束

PRIMARY KEY约束唯一地标识数据库表中的每个记录。可以有更多的UNIQUE列,但表中只有一个主键,主键是唯一的ID。

您已经在上面看到了很多示例,其中无涯教程创建了ID为主键的COMAPNY4表-

CREATE TABLE COMPANY4(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

FOREIGN KEY 约束

外键约束指定一列中的值必须与另一个表的某一行中出现的值匹配,之所以称为外键,是因为约束是外键。

如,以下PostgreSQL语句创建一个名为COMPANY5的新表并添加五列。

CREATE TABLE COMPANY6(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

如,以下PostgreSQL语句创建一个名为DEPARTMENT1的新表,该表将添加三列, EMP_ID列是外键,它引用表COMPANY6的ID字段。

CREATE TABLE DEPARTMENT1(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      references COMPANY6(ID)
);

CHECK 约束

CHECK约束使条件可以检查输入到记录中的值,如果条件评估为false,则记录违反了约束,因此不会输入到表中。

如,以下PostgreSQL语句创建一个名为COMPANY5的新表并添加五列。 在这里,无涯教程添加一个带有SALARY的CHECK列,这样就不能将任何SALARY设置为零。

CREATE TABLE COMPANY5(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL    CHECK(SALARY > 0)
);

EXCLUSION 约束

排除约束条件确保使用指定的运算符在指定的列或表达式上比较任何两行时,这些运算符比较中的至少一个将返回false或null。

链接:https://www.learnfk.comhttps://www.learnfk.com/postgresql/postgresql-constraints.html

来源:LearnFk无涯教程网

如,以下PostgreSQL语句创建一个名为COMPANY7的新表并添加五列。在这里,无涯教程添加一个EXCLUDE约束-

CREATE TABLE COMPANY7(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT,
   AGE            INT  ,
   ADDRESS        CHAR(50),
   SALARY         REAL,
   EXCLUDE USING gist
   (NAME WITH =,
   AGE WITH )
);

由于无涯教程强制了年龄必须相同,因此让无涯教程通过在表中插入记录来看到这一点-

INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Learnfk', 42, 'California', 20000.00 );

对于前两个INSERT语句,记录将添加到COMPANY7表中。对于第三条INSERT语句,显示以下错误-

ERROR:  duplicate key value violates unique constraint "company7_pkey"
DETAIL:  Key (id)=(3) already exists.

Dropping 约束

要删除约束,您需要知道其名称。如果名称已知,很容易删除。否则,您需要找出系统生成的名称。 psql命令\d表名在这里可能会有所帮助。通用语法是-

ALTER TABLE table_name DROP CONSTRAINT some_name;

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

深入浅出gRPC -〔李林锋〕

后端存储实战课 -〔李玥〕

Java业务开发常见错误100例 -〔朱晔〕

Redis核心技术与实战 -〔蒋德钧〕

爆款文案修炼手册 -〔乐剑峰〕

性能优化高手课 -〔尉刚强〕

Tony Bai · Go语言第一课 -〔Tony Bai〕

Kubernetes入门实战课 -〔罗剑锋〕

零基础学Python(2023版) -〔尹会生〕

好记忆不如烂笔头。留下您的足迹吧 :)