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约束提供了一个名称:
让我们看一个示例,其中 Salary列上的约束具有以下约束名称:
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 ,该服务器是我们先前在的帮助下创建的下面的命令:
第3步
之后,我们将执行以下语法列出特定表的所有约束(主键,检查键,唯一键)。
最后,我们使用上面的命令查看 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约束和单独名称的概念。
使用create命令来使订单>