第7章 索引和完整性.ppt

第7章 索引和完整性

7.2.2 创建域完整性:CHECK/CREATE RULE 【例7.11】 在pxscj数据库中创建一个表xsb1,其结构与xsb表相同。但要求:出生时间必须大于1994年1月1日。 USE pxscj GO CREATE TABLE xsb1 ( 学号 char(6) NOT NULL PRIMARY KEY, 姓名 char(8) NOT NULL, 性别 bit NULL DEFAULT 1, 出生时间 date NULL CHECK(出生时间1994-01-01), 专业 char(12) NULL DEFAULT 计算机, 总学分 int NULL DEFAULT 0, 备注 varchar(500) NULL, CONSTRAINT cxh_zy CHECK(left(学号,2)=19 and 专业=计算机 or left(学号,2)=22 and 专业=通信工程) ) GO 7.2.2 创建域完整性:CHECK/CREATE RULE 定义后,在xsb1表中输入学号“220001”中的“22”与“计算机专业”不一致会显示错误信息,如图7.6所示。 7.2.2 创建域完整性:CHECK/CREATE RULE 3)以命令方式在修改表时创建CHECK约束。 在使用ALTER TABLE语句修改表时也能定义CHECK约束。 定义CHECK约束的语法格式为: ALTER TABLE 表名 [ WITH { CHECK | NOCHECK } ] ADD [列定义] [CONSTRAINT 约束名] CHECK (逻辑表达式) 【例7.12】 通过修改pxscj数据库的cjb表,增加“成绩”字段的CHECK约束。 USE pxscj GO ALTER TABLE cjb ADD CONSTRAINT cj_constraint CHECK ?(成绩=0 AND 成绩=100) 7.2.2 创建域完整性:CHECK/CREATE RULE 4)利用SQL语句删除CHECK约束 语法格式: ALTER TABLE 表名 DROP CONSTRAINT 约束名 【例7.12续】 删除cjb表“成绩”字段的CHECK约束。 ALTER TABLE cjb DROP CONSTRAINT cj_constraint 7.2.2 创建域完整性:CHECK/CREATE RULE 2.规则对象的定义、使用与删除 (1)规则对象的定义。 语法格式: CREATE RULE [ 架构名. ] 规则名 AS 条件表达式 (2)将规则对象绑定到用户定义数据类型或列。 将规则对象绑定到列或用户定义数据类型中可以使用系统存储过程sp_bindrule。 语法格式: sp_bindrule [ @rulename = ] 规则名 , [ @objname = ] 对象名 [ , [ @futureonly = ] futureonly标志 ] 7.2.2 创建域完整性:CHECK/CREATE RULE 【例7.13】 如下程序创建一个规则,并绑定到表kcb的课程号列,用于限制课程号的输入范围。 (1)创建规则T-SQL命令。 USE pxscj GO CREATE RULE kc_rule AS @range like [1-5][0-9][0-9] GO EXEC sp_bindrule kc_rule, kcb.课程号 /*执行存储过程使用EXEC命令*/ GO 程序如果正确执行,则提示:“已将规则绑定到表的列”。 7.2.2 创建域完整性:CHECK/CREATE RULE (2)在“对象资源管理器”中展开“pxscj”→“表”→“dbo.kcb”→“列”,右击“课程号”,选择“属性”菜单项,在kcb表的“列属性-课程号”窗口的“规则”栏中可以查看已经新建的规则。 【例7.14】 创建一个规则,用以限制输入到该规则所绑定的列中的值只能是该规则中列出的值。 CREATE RULE list_rule AS @list IN (C语言, 离散数学, 微机原理) GO EXEC sp_bindrule list_rule, kcb.课程名 GO 7.2.2 创建域完整性:CHECK/CREATE RULE 【例7.15】 如下程序定义一个用户数据类型course_num,然后将前面定义的规则“kc_rule”绑定到用户数据类型course_num上,最后创建表kcb1,其“课程号”的数据类型为cou

文档评论(0)

1亿VIP精品文档

相关文档