实验9 数据完整性实验
德州学院 计算机系 实验9 数据完整性实验 预备知识 -约束机制的分类 为了保证数据完整性,Sql Server 2008提供了下列约束机制: (1)PRIMARY KEY约束(主键约束),用于实现实体完整性; (2)FOREIGN KEY约束(外键约束),用于实现参照完整性; (3)UNIQUE约束(唯一约束)、NOT NULL约束(非空约束)、CHECK约束(检查约束)和DEFAULT约束(默认值约束),用于实现用户自定义的完整性。 预备知识 -创建约束 在Sql Server 2008中,所有约束即可以在创建表时同时创建,也可以在表创建完毕后添加。约束又分列级约束和表级约束,除NOT NULL只能做列级约束外,其余约束即可做列级约束,也可以做表级约束,只是列级约束只能引用被约束的列,而表级约束能引用表中的任意列。 预备知识 -创建约束 PRIMARY KEY 约束 列级约束格式: [CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED | NONCLUSTERED] 表级约束格式: [CONSTRAINT 约束名] PRIMARY KEY [CLUSTERED | NONCLUSTERED] (字段名) 关键字CLUSTERED和NONCLUSTERED指定主键约束是聚集索引还是非聚集索引。如果省略,并且没有为unique约束指定聚集索引,则对该主键约束使用CLUSTERE 预备知识 -创建约束 【例9-1】建立CourseInfo表,并指定Cno为主键。 CREATE TABLE CourseInfo (Cno char(6) CONSTRAINT PK_CourseInfo PRIMARY KEY, /*列级主键约束*/ Cname varchar(50) NULL, Cpno char(6) NULL, Credit decimal(2, 1) NULL ) 预备知识 -创建约束 FOREIGN KEY约束 [CONSTRAINT 约束名] FOREIGN KEY (关联字段) REFERENCES 被参照(被关联字段) [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT ] [ ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT] 其中,ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT是指当被参照表删除元组时,可以采用以下四种方式之一保证参照完整性:级联删除参照表中相应元组,或者被参照表拒绝删除元组,或者将参照表中相应元组的值设置为null,或者将参照表中相应元组的值设置为默认值。主键表更新元组时,也可以采用这四种方式中的一种。 预备知识 -创建约束 【例9-2】建立TeachTasksInfo表,并将字段Cno与CourseInfo表中的Cno建立外键联系,指定当被参照表(CourseInfo表)删除元组造成与参照表(TeachTasksInfo表)数据不一致时,拒绝删除被参照表中的元组;指定当被参照表(CourseInfo表)更新元组时,则级联更新参照表(TeachTasksInfo表)中相应的元组数据。 预备知识 -创建约束 CREATE TABLE TeachTasksInfo ( TeachTaskID char(26) primary key, Cno char(6), TeacherID char(5), AcadYear char(9), Term char(1), ExamMethod varchar(10), Depart varchar(30), TimeTable varchar(50), CONSTRAINT FK_TeachTaskCourseInfo FOREIGN KEY(Cno) REFERENCES CourseInfo(Cno) ON UPDATE CASCADE /*当更新CourseInfo中的Cno时,级联更新TeachTasksInfo */ ON DELETE NO ACTION /*当删除CourseInfo表中的元组造成不一致时,拒绝删除*/ ) 预备知识 -创建约束 UNIQUE约束 列级约束格式: [CONSTRAINT 约束名] UNIQUE 表级约束格式: [CONSTRAIN