如何在 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 约束,则必须按照以下步骤操作:
- 创建新数据库
- 使用 CHECK 约束创建一个新表
- 插入值
- 查看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;
热门文章
优秀文章