如何在 SQL 中使用 CHECK

一、SQL CHECK 语法

在本文中,您将学习如何在 SQL 查询中对列使用 CHECK 关键字。

CHECK 是一个 SQL 约束,它允许数据库用户只输入那些满足指定条件的值。如果任何列被定义为 CHECK 约束,则该列仅包含 TRUE 值。

以下语法在创建表时将 CHECK 约束添加到列:

CREATE TABLE Table_Name  
(  
Column_Name_1 DataType (character_size of the column_1) CHECK (Boolean_Expression),  
Column_Name_2 DataType (character_size of the column_2) CHECK (Boolean_Expression),  
Column_Name_3 DataType (character_size of the column_3) CHECK (Boolean_Expression),  
........,  
Column_Name_N DataType (character_size of the column_N) CHECK (Boolean_Expression)  
)  ;  

我们可以轻松地对一张 SQL 表中的一列或多列使用 CHECK 约束。

当表已存在时,以下语法将 CHECK 约束添加到列:

ALTER TABLE Table_Name ALTER COLUMN Column_Name datatype CHECK;  

二、SQL CHECK 使用步骤

如果要在创建表时使用 CHECK 约束,则必须按照以下步骤操作:

  1. 创建新数据库
  2. 使用 CHECK 约束创建一个新表
  3. 插入值
  4. 查看Table的记录

第 1 步:创建简单的新数据库

首先,您必须使用结构化查询语言创建一个新数据库。以下查询在 SQL 服务器中创建新的投Voting 数据库:

CREATE Database Voting; 

 第 2 步:创建新表并添加 CHECK

以下查询在Voting数据库中创建People_Info表,并将 CHECK 约束添加到表的People_Age列:

CREATE TABLE People_Info  
(  
People_ID INT NOT NULL PRIMARY KEY,    
People_Name VARCHAR (100),    
People_Gender Varchar(20),  
People_Age INT NOT NULL CHECK (People_Age >=18),    
People_Address Varchar (80)   
); 

第 3 步:插入值

以下 INSERT 查询根据应用于 People_Age 列的 CHECK 约束在 People_Info 表中插入符合条件的人员的记录:

INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1001, Arush, Male, 20, Agra);  
INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1002, Bulbul, Female, 30, Lucknow);  
INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1004, Saurabh, Male, 20, Lucknow);  
INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1005, Shivani, Female, 25, Agra );  
INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1006, Avinash, Male, 22, Delhi);  
INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1007, Shyam, Male, 19, Banglore);  

以下查询显示约束失败错误,因为我们已在 People_Age 列上应用了约束,该列仅包含大于 18 的值。

INSERT INTO People_Info (People_ID, People_Name, People_Gender, People_Age, People_Address) VALUES (1003, Ram, Male, 15, Delhi);  

第 4 步:查看表的数据

以下查询显示了 People_Info 表的数据。

SELECT * FROM People_Info;   
People_ID People_Name People_Gender People_Age People_Address
1001 Arush Male 20 Agra
1002 Bulbul Female 30 Lucknow
1004 Saurabh Male 20 Lucknow
1005 Shivani Female 25 Agra
1006 Avinash Male 22 Delhi
1007 Shyam Male 19 Banglore

正如我们在上面的 People_Info 表中看到的,People_Age 列包含那些年龄超过 18 岁的人的年龄。

三、在多列上添加CHECK约束

以下 CREATE TABLE 查询为 Doctor_Info 表的多个列指定了 CHECK 约束:

CREATE TABLE Doctor_Info  
(  
Doctor_ID INT NOT NULL PRIMARY KEY,    
Doctor_Name VARCHAR (100),    
Doctor_Specialist VARCHAR (80) CHECK (Doctor_Specialist = 'Cancer'),    
Doctor_GenderVarchar (20) CHECK (Dcotor_Gender = 'Male'),  
Doctor_Country Varchar (80) CHECK (Doctor_Country = 'U. K.')  
) ;  

 以下查询插入了来自英国的癌症专家、男性医生的多条记录。

INSERT INTO Doctor_Info (Doctor_ID, Doctor_Name, Doctor_Specialist, Doctor_Gender, Doctor_Country) VALUES ( 1035, Jones, Cancer, Male, U. K.),  
(1015, Moris, Cancer, Male, U. K.),  
(1003, Harry, Cancer, Male, U. K.),  
(1044, Bunny, Cancer, Male, U. K.),  
(1025, Moria, Cancer, Male, U. K.);  

以下查询显示了 Doctor_Info 表的详细信息:

SELECT * FROM Doctor_Info;  
Doctor_ID Doctor_Name Doctor_Disease Doctor_Gender Doctor_Country
1035 Jones Cancer Male U. K.
1015 Moris Cancer Male U. K.
1003 Harry Cancer Male U. K.
1044 Bunny Cancer Male U. K.
1025 Moria Cancer Male U. K.

四、将 CHECK 约束添加到现有表

任何数据库用户都可以通过在 SQL ALTER 查询中使用 ADD 关键字轻松地将 CHECK 约束添加到现有表。

指定对现有表的 CHECK 约束的语法:

ALTER TABLE Table_Name ADD CONSTRAINT Constraint_Name CHECK(Boolean_Expression);  

 以下 ALTER 语句指定对上述 People_Info 表的 People_Address 列的 CHECK 约束:

ALTER TABLE People_Info ADD CONSTRAINT chk_people_address CHECK(People_Address = 'Lucknow');  

五、从表中删除 CHECK 约束

带有 ALTER 语句的 DROP 关键字允许数据库用户从表的列中删除 CHECK 约束。

如果要从 SQL 表中删除 CHECK 约束,可以使用以下语法将其删除:

ALTER TABLE Table_Name DROP CONSTRAINT Contraint_Name;  

以下查询从 People_Info 表的 People_Address 列中删除 CHECK 约束:

ALTER TABLE People_Info DROP CONSTRAINT chk_people_address;  

 

热门文章

优秀文章