学习情境4 SQL Server 2000数据完整性实现(6课时) 一、【教学目标】
1. 理解约束,默认和规则;
2. 掌握约束,默认和规则的创建及应用。 二、【教学内容】
4.1数据完整性 4.2使用约束 4.3使用规则
4.4使用默认
4.5约束和默认/规则的比较 4.6上机实训
三、【教学重点、难点】 重点:1、创建规则 默认 约束; 2、绑定规则默认约束
难点:1、用sql 语句创建 使用约束 默认和规则 2、约束,默认,规则的比较 四、【教学过程】
第4章 SQL Server 2000数据完整性实现 4.1 数据完整性
实体完整性:实体完整性把表中的每行看作一个实体,也可以称为表完整性,它要求所有行都具有唯一标识。
域完整性:也称列完整性,要求域中指定列的数据具有正确的数据类型、格式和有效的数值范围。域完整性通过默认值、FOREIGN KEY、CHECK等约束及默认、规则等数据库对象来实现。
引用完整性:引用完整性维持被参照表和参照表之间的数据一致性,它通过PRIMARY KEY约束和FOREIGN KEY约束来实现。引用完整性确保键值在所有表中一致。这样的一致性要求不能引用不存在的值,如果键值更改了,那么在整个数据库中,对该键值的所有引用要进行同样的更改。
参照完整性:引用完整性维持被参照表和参照表之间的数据一致性,它通过PRIMARY KEY约束和FOREIGN KEY约束来实现。
用户定义的完整性(User-defined Integrity):用户定义的完整性允许用户定
21
义不属于其他任何一类完整性的特定规则。各类完整性均支持用户定义的完整性。
4.2 使用约束
约束是独立于表结构的,可作为数据库定义部分在CREATE TABLE语句中声明,可以在不改变表结构的基础上,通过ALTER TABLE语句添加或者删除。当表被删除时,表中所有的约束定义也将被删除。
建立和使用约束的目的是保证数据的完整性,约束是SQL Server强制实行的应用规则,它是通过限制列中数据、行中数据和表之间的时间来保证数据的完整性。约束(Constraint)限制了用户可能输入到表或字段中的值。SQL Server的约束包括:DEFAULT、CHECK、UNIQUE、PRIMARY KEY和FOREIGN KEY,它们均有各自不同的目的。这就需要用户根据自己的需要,选择和使用约束。 4.2.1 DEFAULT约束 1.DEFAULT约束的语法格式 CONSTRAINT 约束名
DEFAULT { 常量表达式 | NULL } [ FOR 字段名 ] 2.示例
/*默认值的表达书写格式*/ ALTER TABLE 学生基本信息表 ADD
CONTRAINT 性别 DEFAULT'男' FOR 性别
此例说明如果没有指定某个学生的“性别”,则系统默认为 '男'。 4.2.2 CHECK约束 1.CHECK约束的语法格式 [ CONSTRAINT constrain_name ]
CHECK [ NOT FOR REPLICATION ] ( logical_expression )
逻辑表达式可以是AND或者OR连接的多个简单逻辑表达式构成的复合型逻辑表达式,通过任何基于逻辑运算符返回结果TRUE或FALSE的逻辑表达式来创建
22
CHECK约束。 2.示例
/*增加一个CHECK约束*/ USE afu GO
ALTER TABLE student ADD
CONTRAINT studentid CHECK
( studentid LIKE '[0-9][0-9][0-9]')
该示例中,输入学生的学号被限定为一个三位数,且该三位数的每一位只能在0~9的范围内,使用字母以及其他符号是无效的。 4.2.3 UNIQUE约束 1.UNIQUE约束的语法格式 [ CONSTRAINT constraint_name ]
UNIQUE [ CLUSTERED | NONCULUSTERED ] [ WITH FILLFACTOR = fillfactor ] [ ON { filegroup | DEFAULT } ] ] 2.示例
/*在表course中添加一个UNIQUE约束*/ USE afu GO
ALTER TABLE Course ADD
CONTRAINT u_coursename_no
UNIQUE NONCLUSTERED ( coursename_no )
该例在表Course中的课程名列上创建一个UNIQUE约束。这样,就不能在该表中插入同样课程名的数据了。 4.2.4 PRIMARY KEY约束 1.PRIMARY KEY约束的语法格式
23
[ CONSTRAINT constraint_name ]
PRIMARY KEY [ CLUSTERED | NONCLUSTERED ] { ( column [ ,?n ] ) } [ WITH FILLFACTOR = fillfactor ] [ ON { filegroup | DEFAULT } ] ] 2.示例
/*添加一个主键*/ USE afu GO
ALTER TABLE 学生基本信息表 ADD
CONSTRAINT PK_studentid
PRIMARY KEY CLUSTERED (studentid)
该示例在表“学生基本信息表”中增加一个主键,并指定studentid(学号)列为主键值,同时创建了一个聚簇索引,这意味着以后不能在该表中插入学号两个相同的学生基本信息。 4.2.5 FOREIGN KEY约束 1.FOREIGN KEY约束定义格式 [ CONSTRAINT constraint_name ] FOREIGN KEY [ ( column [ ,?n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,?n ] ) ] [ NOT FOR REPLICATION ] 2.示例
/*增加一个FOREIGN KEY*/ USE afu GO
ALTER TABLE grade ADD
CONTRAINT FK_studentid
24
FOREIGN KEY ( studentid ) REFERANCES student ( studentid )
上例在表grade中增加一个FOREIGN KEY约束,该约束把表grade中的studentid与表student中的studentid联系起来,在这两个表之间创建一种约束关系。 4.3 使用规则
规则是一种数据库对象,与默认的使用方法类似,规则可以绑定到一列或者多列上,也可以绑定到用户定义的数据类型上,其作用类似于CHECK约束——为INSERT语句指定可接受的数据值的范围。CHECK 约束作为 CREATE TABLE 语句的一部分进行指定,而规则可以作为单独的对象进行创建,然后绑定到列上。 4.3.1 创建规则 1.创建规则的语法格式 CREATE RULE rule_name AS condition_expression 2.参数说明
rule_name是新规则的名称,规则名称必须符合标识规则,可以选择是否指定规则所有者的名称。
condition_expression是定义规则的条件。规则可以是WHERE子句中的任何有效的表达式,并且可以包含诸如算术运算符、关系运算符和IN、LIKE、BETWEEN之类的元素。 3.示例
/*创建学生的年龄必须在一定范围的规则*/ CREATE RULE age_rule AS
/*创建交通灯颜色的规则*/ CREATE RULE colour_rule
AS @colour IN ('red', 'yellow','green') 4.3.2 绑定规则 1.绑定规则的语句
sp_bindrule [ @rulename = ] 'rule' ,
25