资源预览内容
第1页 / 共106页
第2页 / 共106页
第3页 / 共106页
第4页 / 共106页
第5页 / 共106页
第6页 / 共106页
第7页 / 共106页
第8页 / 共106页
第9页 / 共106页
第10页 / 共106页
亲,该文档总共106页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据库原理与技术,北京师范大学经济与工商管理学院,课程内容,数据库的完整性(重点) 实体完整性 参照完整性 用户定义的完整性 完整性约束命名字句 触发器 数据库的安全性(略讲) 计算机安全性概述 数据库安全性控制 视图机制 审计(Audit) 数据加密 统计数据库安全性,网上书店的关系模式,书(书号,书名,出版社,出版社地址,出版社电话,定价,作者,简介,仓库号码,仓库地址,仓库联系人,库存量) 会员(编号,姓名,性别,单位,电话,邮箱,通讯地址,邮编,会员级别,折扣率) 订单(号码,会员号码,下单日期,送书日期,地点,收件人,联系人,书号,数量,备注),数据库完整性,数据库的完整性 数据的正确性和相容性 数据的完整性和安全性是两个不同概念 数据的完整性 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据 防范对象:不合语义的、不正确的数据 数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作,数据库完整性(续),为维护数据库的完整性,DBMS必须: 1.提供定义完整性约束条件的机制 2.提供完整性检查的方法 3.违约处理,实体完整性,实体完整性定义 实体完整性检查和违约处理,实体完整性定义,关系模型的实体完整性 CREATE TABLE中用PRIMARY KEY定义 单属性构成的码有两种说明方法 定义为列级约束条件 定义为表级约束条件 对多个属性构成的码只有一种说明方法 定义为表级约束条件,实体完整性定义(续),例1 将Student表中的Sno属性定义为码(1)在列级定义主码CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(20) NOT NULL, Ssex CHAR(2) ,Sage SMALLINT,Sdept CHAR(20);,实体完整性定义(续),(2)在表级定义主码CREATE TABLE Student(Sno CHAR(9), Sname CHAR(20) NOT NULL,Ssex CHAR(2) ,Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY (Sno);,实体完整性定义(续),例2将SC表中的Sno,Cno属性组定义为码CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY (Sno,Cno) /*只能在表级定义主码*/);,实体完整性检查和违约处理,插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括: 检查主码值是否唯一,如果不唯一则拒绝插入或修改 检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改,实体完整性检查和违约处理(续),检查记录中主码值是否唯一的一种方法是进行全表扫描,实体完整性检查和违约处理(续),索引,2 参照完整性,参照完整性定义 参照完整性检查和违约处理,参照完整性定义,关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些列为外码 用REFERENCES短语指明这些外码参照哪些表的主码,参照完整性定义(续),例:关系SC中一个元组表示一个学生选修的某门课程的成绩,(Sno,Cno)是主码。Sno,Cno分别参照引用Student表的主码和Course表的主码 例3 定义SC中的参照完整性CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT,PRIMARY KEY (Sno, Cno), /*在表级定义实体完整性*/FOREIGN KEY (Sno) REFERENCES Student(Sno), /*在表级定义参照完整性*/FOREIGN KEY (Cno) REFERENCES Course(Cno) /*在表级定义参照完整性*/);,参照完整性检查和违约处理,可能破坏参照完整性的情况及违约处理,违约处理,参照完整性违约处理1. 拒绝(NO ACTION)执行 默认策略2. 级联(CASCADE)操作3. 设置为空值(SET-NULL) 对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值,违约处理(续),例4 显式说明参照完整性的违约处理示例CREATE TABLE SC(Sno CHAR(9) NOT NULL,Cno CHAR(4) NOT NULL,Grade SMALLINT,PRIMARY KEY(Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*级联删除SC表中相应的元组*/ON UPDATE CASCADE, /*级联更新SC表中相应的元组*/FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE NO ACTION /*当删除course 表中的元组造成了与SC表不一致时拒绝删除*/ON UPDATE CASCADE /*当更新course表中的cno时,级联更新SC表中相应的元组*/);,3 用户定义的完整性,用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求 RDBMS提供,而不必由应用程序承担,3 用户定义的完整性,属性上的约束条件的定义 属性上的约束条件检查和违约处理 元组上的约束条件的定义 元组上的约束条件检查和违约处理,属性上的约束条件的定义,CREATE TABLE时定义 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK),属性上的约束条件的定义(续),1.不允许取空值 例5 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。CREATE TABLE SC(Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT NOT NULL, PRIMARY KEY (Sno, Cno), /* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值,则在列级不允许取空值的定义就不必写了 * /);,属性上的约束条件的定义(续),2.列值唯一 例6 建立表DEPT,要求名称Dname列取值唯一,编号Deptno列为主码CREATE TABLE DEPT(Deptno NUMERIC(2),Dname CHAR(9) UNIQUE,/*要求Dname列值唯一*/Location CHAR(10),PRIMARY KEY (Deptno);,属性上的约束条件的定义(续),3. 用CHECK短语指定列值应该满足的条件例7 Student表的Sex只允许取“男”或“女”。CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) NOT NULL, Sex CHAR(2) CHECK (Sex IN (男,女) ) , /*性别属性Sex只允许取男或女 */Sage SMALLINT,Sdept CHAR(20);,2 属性上的约束条件检查和违约处理,插入元组或修改属性的值时,RDBMS检查属性上的约束条件是否被满足 如果不满足则操作被拒绝执行,3 元组上的约束条件的定义,在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制 同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件,元组上的约束条件的定义(续),例9 当学生的性别是男时,其名字不能以Ms.打头。CREATE TABLE Student(Sno CHAR(9), Sname CHAR(8) NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY (Sno),CHECK (Sex=女 OR Sname NOT LIKE Ms.%)/*定义了元组中Sname和 Sex两个属性值之间的约束条件*/); 性别是女性的元组都能通过该项检查,因为Ssex=女成立; 当性别是男性时,要通过检查则名字一定不能以Ms.打头,元组上的约束条件检查和违约处理,插入元组或修改属性的值时,RDBMS检查元组上的约束条件是否被满足 如果不满足则操作被拒绝执行,4 完整性约束命名子句,CONSTRAINT 约束CONSTRAINT PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语,完整性约束命名子句(续),例10 建立学生登记表Student,要求学号在9000099999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。CREATE TABLE Student(Sno NUMERIC(6)CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),Sname CHAR(20) CONSTRAINT C2 NOT NULL,Sage NUMERIC(3)CONSTRAINT C3 CHECK (Sage 30),Ssex CHAR(2)CONSTRAINT C4 CHECK (Ssex IN ( 男,女),CONSTRAINT StudentKey PRIMARY KEY(Sno); 在Student表上建立了5个约束条件,包括主码约束(命名为StudentKey)以及C1、C2、C3、C4四个列级约束。,完整性约束命名子句(续),修改表中的完整性限制 使用ALTER TABLE语句修改表中的完整性限制,完整性约束命名子句(续),例13 修改表Student中的约束条件,要求学号改为在900000999999之间,年龄由小于30改为小于40 可以先删除原来的约束条件,再增加新的约束条件ALTER TABLE StudentDROP CONSTRAINT C1;ALTER TABLE StudentADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),ALTER TABLE StudentDROP CONSTRAINT C3;ALTER TABLE StudentADD CONSTRAINT C3 CHECK (Sage 40);,5 触发器,触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程 由服务器自动激活 可以进行更为复杂的检查和操作,具有更精细和更强大的数据控制能力,触发器,定义触发器 激活触发器 删除触发器,定义触发器,CREATE TRIGGER语法格式CREATE TRIGGER BEFORE | AFTER ON FOR EACH ROW | STATEMENTWHEN ,定义触发器(续),定义触发器的语法说明: 1. 创建者:表的拥有者 2. 触发器名 3. 表名:触发器的目标表 4. 触发事件:INSERT、DELETE、UPDATE 5. 触发器类型 行级触发器(FOR EACH ROW) 语句级触发器(FOR EACH STATEMENT),定义触发器(续),假设在例11的TEACHER表上创建了一个AFTER UPDATE触发器。如果表TEACHER有1000行,执行如下语句:UPDATE TEACHER SET Deptno=5; 如果该触发器为语句级触发器,那么执行完该语句后,触发动作只发生一次 如果是行级触发器,触发动作将执行1000次,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号