7.5.1 在创建表时添加检查约束

在一张数据表中,检查约束可以有多个,但是每一列只能设置一个检查约束。用户可以在创建表时添加检查约束。建表时添加检查约束的语法格式有以下两种。

1.添加列级检查约束

添加列级检查约束的语法格式如下:

     CREATE TABLE table_name
     (
     COLUMN_NAME1  DATATYPE CHECK(expression),
     COLUMN_NAME2  DATATYPE,
     COLUMN_NAME3  DATATYPE
     ……
     );

主要参数介绍如下:

• CHECK:检查约束的关键字。

• expression:约束的表达式,可以是1个条件,也可以同时有多个条件。例如:设置该列的值大于10,那么表达式可以写成COLUMN_NAME1>10;如果设置该列的值在10~20之间,就可以将表达式写成COLUMN_NAME1>10 and COLUMN_NAME1<20。

【例7.13】在创建水果表时,给水果价格列添加检查约束,要求水果的价格大于0且小于20。在【查询编辑器】窗口中输入如下T-SQL语句:

     CREATE TABLE fruit
     (
     id        INT     PRIMARY KEY,
     name     VARCHAR(20),
     price     DECIMAL(6,2)  CHECK(price>0 and price<20),
     origin     VARCHAR(20),
     tel        VARCHAR(20) ,
     remark    VARCHAR(200),
     );

单击【执行】按钮,即可完成添加检查约束的操作,并在【消息】窗格中显示命令已成功完成的信息提示,如图7-29所示。

图7-29 执行T-SQL语句

打开水果表的设计界面,选择添加检查约束的列,右击鼠标,在弹出的快捷菜单中选择【CHECK约束】菜单命令,即可打开【CHECK约束】对话框,在其中查看添加的检查约束,如图7-30所示。

图7-30 【CHECK约束】对话框

2.添加表级检查约束

添加表级检查约束的语法格式如下:

     CREATE TABLE table_name
     (
     COLUMN_NAME1  DATATYPE,
     COLUMN_NAME2  DATATYPE,
     COLUMN_NAME3  DATATYPE,
     ……
     CONSTRAINT ck_name CHECK(expression),
     CONSTRAINT ck_name CHECK(expression),
     …..
     );

主要参数介绍如下:

• ck_name:检查约束的名字,必须写在CONSTRAINT关键字的后面,并且检查约束的名字不能重复。检查约束的名字通常是以ck_开头,如果CONSTRAINT ck_name部分省略,系统会自动为检查约束设置一个名字,命名规则为“ck_表名_列名_随机数”。

• CHECK(expression):检查约束的条件。

【例7.14】在创建员工信息表时,给员工工资列添加检查约束,要求员工的工资大于1800且小于3000。在【查询编辑器】窗口中输入如下T-SQL语句:

单击【执行】按钮,即可完成添加检查约束的操作,并在【消息】窗格中显示命令已成功完成的信息提示,如图7-31所示。

图7-31 添加表级检查约束

打开员工信息表的设计界面,选择添加检查约束的列,右击鼠标,在弹出的快捷菜单中选择【CHECK约束】菜单命令,即可打开【CHECK约束】对话框,在其中查看添加的检查约束,如图7-32所示。

图7-32 查看添加的表级检查约束

注意

检查约束可以帮助数据表检查数据,确保数据的正确性,但是也不能给数据表中的每一列都设置检查约束,否则会影响数据表中数据操作的效果。因此,在给表设置检查约束前,也要尽可能地确保检查约束是否真的有必要。