PostgreSQL教程

PostgreSQL 检查约束

在本节中,我们将了解 PostgreSQL Check约束条件的工作原理,该约束条件用于确保所有表格的列或字段中的值满足特定情况。
PostgreSQL检查约束的示例,如何为以下项创建检查约束新表和现有表。

什么是PostgreSQL CHECK约束?

在 PostgreSQL ,可以通过单独的名称定义Check约束。它用于控制要插入的列的值。
它使我们可以验证将值存储到记录中的条件。如果该语句为假,则数据会破坏未保存在表中的约束。
换句话说,可以说 PostgreSQL CHECK约束用于确保表的列或字段中的所有值都满足某些条件。
例如,检查约束必须与布尔表达式匹配,才能在将值插入或更新到列之前对其进行计算。
PostgreSQL将更新或插入这些值如果值保留检查约束,则将值添加到列中。否则,PostgreSQL将放弃修改并引发约束违规错误。
使用create table语句创建CHECK约束的语法
插图用于显示如何使用 创建表来创建 CHECK约束命令:
CREATE TABLE table_name(  
col1 datatype,  
col2 datatype, 
CONSTRAint constraint_name
CHECK(condition);
);  
参数说明
在上面的语法中,我们使用了以下参数,这些参数在下表中进行了讨论:
参数名称 说明
table_name 这是我们要创建的表的名称。
col1,col2 这些是我们在表中创建的列。
constraint_name constraint_name参数用于指定CHECK约束的名称。
Column_name 这些是将成为CHECK约束的列。

PostgreSQL CHECK约束示例

要了解 PostgreSQ CHECK约束的工作原理,,我们将看到以下示例。
在使用CREATE TABLE命令指定表的结构时,通常可以使用 CHECK约束。
在下面的示例中,我们创建一个名为 Worker ,其中包含多个列,例如 Worker_ID,Worker_name,DOB,Joinging_date和Salary 。
但是,在创建 Worker 表之前,我们将使用 DROP TABLE 命令,以检查 Jtp 数据库中是否已经存在相似的表。
DROP TABLE if EXISTS Worker;
输出
执行上述命令后,我们将获得以下窗口消息: Worker 表不存在。
检查约束
现在,我们将创建 使用CREATE命令的Worker 表,如以下语句所示:
CREATE TABLE Worker (
Worker_id SERIAL PRIMARY KEY,
Worker_name VARCHAR (40),
DOB DATE CHECK (DOB> '1900-01-01'),
  Joined_date DATE CHECK (joined_date >DOB),
  Salary numeric CHECK(salary > 0)
);
输出
在执行上述命令时,我们将获得以下消息窗口,其中显示 Worker 表已成功创建到 jtp 数据库中。
检查约束
在上面的 Worker 表中,我们使用了以下三个CHECK约束:
检查约束 说明
First constraint 工人的出生日期(DOB)必须大于01/01/1900。如果我们尝试在1900年1月1日之前插入出生日期,则会收到错误消息。
Second constraint joind_date必须大于出生日期(DOB)。并且这种特殊的检查将防止修改有关其语义含义的错误日期。
Third constraint 薪水必须大于零。
成功创建 Worker 后,我们将在 INSERT 命令的帮助下向其中输入一些值。
INSERT INTO Worker (Worker_name, DOB, Joined_date, Salary)
VALUES ('Mike Ross', '1985-10-01', '2018-11-23',-300000);
输出
在执行上述命令后,PostgreSQL发出了以下错误,因为我们将负薪水值(-300000)插入了薪金列。
错误: 关系" worker"的新行违反了检查约束" worker_salary_check"的详细信息: 失败行包含(2,Mike Ross,1985-10-01,2018-11-23,-300000)。
检查约束
由于薪水列上的 CHECK约束,该插入命令失败,该约束仅采用正值。
默认情况下,PostgreSQL在以下模式的帮助下为 CHECK约束提供了一个名称:
{table}_{column}_check
让我们看一个示例,其中 Salary列上的约束具有以下约束名称:
Worker_salary_check

PostgreSQL CHECK约束以单独的名称

如果我们要为CHECK约束分配单独的名称,则可以在之后定义它> CONSTRAINT表达式,如下图所示:
column_name data_type CONSTRAint constraint_name CHECK(...)
让我们看一个示例示例,以了解如何在PostgreSQL Check约束中使用单独的名称:
为此,我们将创建一个新表,作为 <使用create命令来使订单 生效,如下所示: < div>
CREATE TABLE Orders(
Order_no INTEGER,
Article_name VARCHAR(45),
Order_date DATE,
Order_quantity NUMERIC,
Article_Price NUMERIC CONSTRAint positive_Article_price CHECK (Article_Price>0)
);
输出
在执行上述命令时,我们将获得以下窗口消息,其中显示 Orders 表已成功创建。
检查约束
如果要查看约束数据字典,我们可以按照以下步骤操作:
步骤1
打开 SQL shell(psql),其中包含必要的详细信息。之后,我们将使用在PostgreSQL安装过程中创建的密码,登录到Postgres数据库服务器。
提供密码后,我们已连接到 Postgres服务器,如下面的屏幕快照所示:
检查约束
第2步
现在,我们将连接到特定的数据库服务器 jtp ,该服务器是我们先前在的帮助下创建的下面的命令:
\c jtp

检查约束
第3步
之后,我们将执行以下语法列出特定表的所有约束(主键,检查键,唯一键)。
\d+ tablename
最后,我们使用上面的命令查看 Orders 表的约束:
\d+ Orders
输出
执行上述命令后,我们将得到以下结果:
检查约束
注意: 在上面的Orders表中,Article_price列不能包含任何小于或等于零(0)的值。
此处,已包含约束名称,因此,在关键字CONSTRAINT 之后是命名约束 positive_Article_price

使用ALTER TABLE命令为现有表定义PostgreSQL CHECK约束

在PostgreSQL中,我们可以为PostgreSQL添加PostgreSQL检查约束已有 ALTER TABLE 命令帮助的表。
假设数据库中已有一个表,该表名为 Amount_list。
CREATE TABLE Amount_list (
  ID serial PRIMARY KEY,
  Item_id int NOT null,
  Amount NUMERIC NOT null,
  Discount NUMERIC NOT null,
  Valid_from DATE NOT null,
  Valid_to DATE NOT null
);
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 Amount_list >表已成功创建。
检查约束
要添加 CHECK约束到 Amount_list 表中,我们可以使用ALTER TABLE命令,其中金额和折扣大于零,并且折扣小于金额。
注意: 我们还可以使用布尔表达式,其中包括AND运算符。
ALTER TABLE Amount_list 
ADD CONSTRAint Amount_Discount_check 
CHECK (
  Amount> 0
  AND Discount >= 0
  AND Amount > Discount
);
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 Amount_list 表已成功创建。
检查约束
和 Valid_to 列值必须等于或大于 Valid_from列值,如以下命令所示:
ALTER TABLE Amount_list 
ADD CONSTRAint valid_range_check 
CHECK (Valid_to >= Valid_from);
输出
在执行上述命令时,我们将检索以下消息窗口,该窗口显示指定的表已成功修改。
检查约束
注意
如果我们放置其他逻辑来限制值,则PostgreSQL Check约束非常有用。 我们还可以借助CHECK约束来确保数据对数据库而言是正确的。

概述

在 PostgreSQL检查约束部分中,我们学习了以下主题:
我们了解到 PostgreSQL CHECK约束用于基于布尔表达式检查列的值。 我们已使用 CREATE TABLE (创建表)命令为特定表创建检查约束。 我们还可以使用 ALTER TABLE 修改PostgreSQL检查约束 我们在ALTER TABLE命令的帮助下向现有表添加了 CHECK CONSTRAINT 。 我们还了解了使用 PostgreSQL Check约束和单独名称的概念。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4