文档详情

数据库上课第八讲数据库的安全性与完整性教程.ppt

发布:2018-05-25约1.94万字共91页下载文档
文本预览下载声明
[例9.14] 续 /* 表级完整性约束条件,studentNo是外码,被参照表是Student */ CONSTRAINT ScoreFK1 FOREIGN KEY (studentNo) REFERENCES Student(studentNo) ON DELETE CASCADE /* 级联删除Score表中相应的元组 */ ON UPDATE CASCADE, /* 级联更新Score表中相应的元组 */ /* 表级完整性约束条件,courseNo是外码,被参照表是Course */ CONSTRAINT ScoreFK2 FOREIGN KEY (courseNo) REFERENCES Course(courseNo) ON DELETE NO ACTION /* 该定义为默认值,可以不定义 */ /* 当更新course表中的courseNo时,级联更新Score表中相应的元组 */ ON UPDATE CASCADE ) 3.4 用户自定义完整性 用户自定义完整性就是定义某一具体应用中数据必须满足的语义要求,由RDBMS提供,而不必由应用程序承担。 包括 属性上的约束 元组上的约束 属性上的约束 属性上的约束包括:列值非空、列值唯一、设置默认值、满足CHECK定义等; 属性上的约束是当往表中插入或修改属性值时,系统检查是否满足约束条件,如果不满足,则拒绝相应的操作。 参看例9.15。9.16 * * 元组上的约束 元组上的约束可以设置不同属性之间的取值的相互约束条件; 用短语CHECK引出的约束; 插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行。 [例9.17] 在学生表Student中定义:如果是男同学,则其姓名不能以刘开头 ?CREATE TABLE Student ( .... /* 性别, 允许为空值, 仅取男和女两个值*/ sex char(2) NULL CHECK ( sex IN ( 男, 女) ), ... CONSTRAINT SexCK CHECK (sex=女 OR studentName NOT LIKE 刘% ), ... ) 本例给出了性别sex属性列与姓名studentName属性列之间必须满足的约束条件 * * 属性级与元组级约束在定义上的区别 如果在定义属性的同时定义约束条件,则为列级约束; 如果单独定义约束条件,则为元组级的约束。 [例9.18] 列级约束 CREATE TABLE Student (   sNo?? char(5) NOT NULL --学号 /* 列级主码约束和列级用户自定义约束 */   CHECK ( sNo LIKE [0-9][0-9][0-9][0-9][0-9] ) PRIMARY KEY, sName char(10) NULL unique,????? --姓名, 列级唯一约束 sSex? char(2)? NULL,??? ??????? --性别 sDate datetime NULL,? ????????? --出生日期 sAge? tinyint DEFAULT 17 NOT NULL --年龄, 列级约束 CHECK ( sAge0 AND sAge60 ), sMZ?? char(10) NULL,??????????? --民族 sDept char(2) NOT NULL,??????? --所在系 sTotal decimal(8, 2) DEFAULT 0.00 NOT NULL --总分 ) [例9.19] 元组级约束。 CREATE TABLE Student ( sNo cha
显示全部
相似文档