5.5 CHECK约束

表中的字段值不仅必须与该字段的数据类型一致,还应具备合理的意义,比如学生表中学生的出生日期,如果现实该学生当前年龄大于100岁或者小于10岁,就是不合理的。这种对字段值的进一步限制被称为域的完整性,可以通过CHECK约束来实现,CHECK也被称为检查约束。

5.5.1 创建表时创建CHECK约束

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

1. 创建表时创建检查约束

创建表时创建检查约束的语法格式如下。

主要参数介绍如下。

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

实例11:在创建水果信息表时,给水果价格列添加检查约束,要求水果的价格大于0小于20。在“查询编辑器”窗口中输入如下语句。

单击“执行”按钮,即可完成创建检查约束的操作,如图5-57所示。打开水果表的设计界面,选择添加检查约束的列,右击,在弹出的快捷菜单中选择“CHECK约束”命令,即可打开“CHECK约束”对话框,在其中查看添加的检查约束,如图5-58所示。

图5-57 执行创建检查约束语句

图5-58 “检查约束”对话框

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

2. 以图形向导方式创建检查约束

(1)登录到SQL Server 2017数据库表,在“对象资源管理器”窗口中,打开要创建数据表的数据库节点,选择表节点,右击,在弹出的快捷菜单中选择“新建”→“表”命令,进入新建表工作界面,如图5-59所示。

(2)录入员工信息表的列信息,如图5-60所示。

图5-59 新建表设计界面

图5-60 录入员工信息表

(3)单击“保存”按钮,打开“选择名称”对话框,在其中输入表名“员工信息表”,单击“确定”按钮,即可保存创建的数据表,如图5-61所示。

(4)选择需要添加检查约束的列,这里选择“基本工资”列,右击,在弹出的快捷菜单中选择“CHECK约束”命令,如图5-62所示。

图5-61 “选择名称”对话框

图5-62 “CHECK约束”命令

(5)打开“CHECK约束”对话框,单击“添加”按钮,进入检查约束编辑状态,如图5-63所示。

图5-63 检查约束编辑状态

(6)选择表达式,在右侧输入检查约束的条件,这里输入“基本工资>1800 AND基本工资<3000”,如图5-64所示。

(7)单击“关闭”按钮,关闭“CHECK约束”对话框,然后单击“保存”按钮,保存数据表,即可完成检查约束的创建操作。

图5-64 输入表达式

5.5.2 修改表时创建CHECK约束

如果在创建表时没有直接创建检查约束,这时可以在修改表时创建检查约束。

1. 使用ALTER语句创建检查约束

修改表时创建检查约束可以通过ALTER TABLE语句来完成,具体的语法格式如下。

      ALTER TABLE table_name
      ADD CONSTRAINT ck_name CHECK (expression);

主要参数介绍如下。

  • table_name:表名,它是要添加检查约束列所在的表名。
  • CONSTRAINT ck_name:添加名为ck_name的约束。该语句可以省略,省略后系统会为添加的约束自动生成一个名字。
  • CHECK (expression):检查约束的定义,CHECK是检查约束的关键字,expression是检查约束的表达式。

实例12:首先创建员工信息表,然后再给员工工资列创建检查约束,要求员工的工资大于1800小于3000。在“查询编辑器”窗口中输入如下语句。

      ALTER TABLE 员工信息表
      ADD CHECK (基本工资>1800 AND 基本工资<3000);

单击“执行”按钮,即可完成创建检查约束的操作,如图5-65所示。打开员工信息表的设计界面,选择添加检查约束的列,右击,在弹出的快捷菜单中选择“CHECK约束”命令,即可打开“检查约束”对话框,在其中查看添加的检查约束,如图5-66所示。

图5-65 添加检查约束

图5-66 查看添加的检查约束

2. 以图形向导方式添加检查约束

(1)选择需要创建检查约束的表,这里选择已经创建好的水果信息表,右击,在弹出的快捷菜单中选择“设计”选项,进入表的设计工作界面,再右击,在弹出的快捷菜单中选择“CHECK约束”命令,如图5-67所示。

(2)打开“检查约束”对话框,单击“添加”按钮,进入检查约束编辑状态,选择表达式,然后右侧输入检查约束的条件,这里输入“水果价格>0 AND水果价格< 20”,如图5-68所示。

图5-67 选择“CHECK约束”命令

图5-68 “检查约束”对话框

(3)单击“关闭”按钮,关闭“CHECK约束”对话框,然后单击“保存”按钮,保存数据表,即可完成检查约束的添加。

5.5.3 删除表中的CHECK约束

当不再需要CHECK约束时,可以将其删除,删除CHECK约束的语法格式如下。

      ALTER TABLE table_name
      DROP CONSTRAINT ck_name;

主要参数介绍如下。

  • table_name:表名。
  • ck_name:检查约束的名字。

实例13:删除员工信息表中添加的检查约束,检查约束的条件为员工的工资大于1800小于3000,名字为:CK__员工信息表__基本工资__5AEE82B9,在“查询编辑器”窗口中输入如下语句。

      ALTER TABLE 员工信息表
      DROP CONSTRAINT CK__员工信息表__基本工资__5AEE82B9;

图5-69 删除检查约束

单击“执行”按钮,即可完成删除检查约束的操作,如图5-69所示。打开员工信息表的设计界面,选择删除检查约束的列,右击,在弹出的快捷菜单中选择“CHECK约束”命令,即可打开“检查约束”对话框,在其中可以看到添加的检查约束已经被删除,如图5-70所示。

在SQL Server Management Studio中,删除检查约束与添加检查约束很相像,只需要在“检查约束”对话框中选择要删除的检查约束,然后单击“删除”按钮,最后再单击“保存”按钮,即可删除数据表中添加的检查约束,如图5-71所示。

图5-70 “检查约束”对话框

图5-71 删除选择的检查约束

微视频