第5章数据库完整性_第1页
第5章数据库完整性_第2页
第5章数据库完整性_第3页
第5章数据库完整性_第4页
第5章数据库完整性_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第5章章 数据库完整性数据库完整性 第5章 数据库完整性 什么是数据库的完整性什么是数据库的完整性 数据的正确性和相容性 防止不合语义的数据进入数据的正确性和相容性 防止不合语义的数据进入 数据库 数据库 例例 学生的年龄必须是整数 取值范围为学生的年龄必须是整数 取值范围为14 29 学生的性别只能是男或女 学生的性别只能是男或女 学生的学号一定是唯一的 学生的学号一定是唯一的 学生所在的系必须是学校开设的系 学生所在的系必须是学校开设的系 完整性 否真实地反映现实世界完整性 否真实地反映现实世界 第5章 数据库完整性 第第5 5章章 数据库完整性数据库完整性 为维护数据库的完整性 为维护数据库的完整性 DBMS必须 必须 1 提供定义完整性约束条件的机制提供定义完整性约束条件的机制 2 提供完整性检查的方法提供完整性检查的方法 3 违约处理违约处理 第5章 数据库完整性 5 1 实体完整性实体完整性 5 2 参照完整性参照完整性 5 3 用户自定义完整性用户自定义完整性 5 4 完整性约束命名子句完整性约束命名子句 5 5 触发器触发器 5 6 小结小结 5 1 实体完整性实体完整性 5 1 1 实体完整性定义实体完整性定义 5 1 2 实体完整性检查和违约处理实体完整性检查和违约处理 5 1 1实体完整性的定义实体完整性的定义 5 1 1实体完整性的定义实体完整性的定义 5 1 1实体完整性的定义实体完整性的定义 5 1 1实体完整性的定义实体完整性的定义 2 在表级定义主码在表级定义主码 CREATE TABLE S Sno CHAR 9 Sname CHAR 20 NOT NULL Ssex CHAR 2 Sage SMALLINT Sdept CHAR 20 PRIMARY KEY Sno 5 1 1实体完整性的定义实体完整性的定义 5 1 实体完整性实体完整性 5 1 1 实体完整性定义实体完整性定义 5 1 2 实体完整性检查和违约处理实体完整性检查和违约处理 5 1 2 实体完整性检查和违约处理实体完整性检查和违约处理 5 1 2 实体完整性检查和违约处理实体完整性检查和违约处理 5 1 2 实体完整性检查和违约处理 5 2参照完整性参照完整性 5 2 参照完整性参照完整性 5 2 1 参照完整性定义参照完整性定义 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 1 参照完整性定义参照完整性定义 5 2 1 参照完整性定义参照完整性定义 例如 关系例如 关系SC中 中 Sno Cno 是主码 是主码 Sno Cno分别参照引用分别参照引用S表的主码和表的主码和C表的主码表的主码 例 例3 定义定义SC中的参照完整性中的参照完整性 CREATE TABLE SC Sno CHAR 9 Cno CHAR 4 Grade SMALLINT PRIMARY KEY Sno Cno 在表级定义实体完整性在表级定义实体完整性 FOREIGN KEY Sno REFERENCES S Sno 在表级定义参照完整性在表级定义参照完整性 FOREIGN KEY Cno REFERENCES C Cno 在表级定义参照完整性在表级定义参照完整性 5 2 参照完整性参照完整性 5 2 1 参照完整性定义参照完整性定义 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 3 在参照关系中 修改外码的问题在参照关系中 修改外码的问题 S Sno Sname Sage SC Sno Cno Grade 95001 张三 20 95001 DB 90 95002 李四 19 95001 OS 85 95002 DB 86 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 5 2 2 参照完整性检查和违约处理 显式说明参照完整性的违约处理示例显式说明参照完整性的违约处理示例 CREATE TABLE SC Sno CHAR 9 Cno CHAR 4 Grade SMALLINT PRIMARY KEY Sno Cno FOREIGN KEY Sno REFERENCES S Sno ON DELETE CASCADE 当删除当删除s表中的元组时级联删除表中的元组时级联删除SC表中相应的元组表中相应的元组 ON UPDATE CASCADE 当更新当更新s表中的元组时 级联更新表中的元组时 级联更新SC表中相应的元组表中相应的元组 FOREIGN KEY Cno REFERENCES C Cno ON DELETE NO ACTION 当删除当删除c 表中的元组造成了与表中的元组造成了与SC表不一致时拒绝删除表不一致时拒绝删除 ON UPDATE CASCADE 当更新当更新c表中的元组时 级联更新表中的元组时 级联更新SC表中相应的元组表中相应的元组 5 3 用户自定义完整性用户自定义完整性 5 3 用户定义的完整性用户定义的完整性 5 3 1 属性上的约束条件的定义属性上的约束条件的定义 5 3 2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5 3 3 元组上的约束条件的定义元组上的约束条件的定义 5 3 4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 5 3 1 属性上的约束条件的定义 5 3 1 属性上的约束条件的定义 5 3 1 属性上的约束条件的定义 5 3 用户自定义完整性 5 3 用户定义的完整性用户定义的完整性 5 3 1 属性上的约束条件的定义属性上的约束条件的定义 5 3 2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5 3 3 元组上的约束条件的定义元组上的约束条件的定义 5 3 4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 5 3 2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 插入元组或修改属性的值时 插入元组或修改属性的值时 RDBMS检查属性上的约束条检查属性上的约束条 件是否被满足件是否被满足 如果不满足则操作被拒绝执行如果不满足则操作被拒绝执行 5 3 用户定义的完整性用户定义的完整性 5 3 1 属性上的约束条件的定义属性上的约束条件的定义 5 3 2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5 3 3 元组上的约束条件的定义元组上的约束条件的定义 5 3 4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 5 3 3 元组上的约束条件的定义元组上的约束条件的定义 5 3 3 元组上的约束条件的定义 5 3 用户定义的完整性用户定义的完整性 5 3 1 属性上的约束条件的定义属性上的约束条件的定义 5 3 2 属性上的约束条件检查和违约处理属性上的约束条件检查和违约处理 5 3 3 元组上的约束条件的定义元组上的约束条件的定义 5 3 4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 5 3 4元组上的约束条件检查和违约处理元组上的约束条件检查和违约处理 5 4 完整性约束命名子句完整性约束命名子句 5 4 完整性约束命名子句 例 例10 建立学生登记表建立学生登记表Student 要求学号在 要求学号在90000 99999之间 姓名不能取空值 年龄小于之间 姓名不能取空值 年龄小于30 性别 性别 只能是只能是 男男 或或 女女 CREATE TABLE Student Sno INT 6 CONSTRAINT C1 CHECK Sno BETWEEN 90000 AND 99999 Sname CHAR 20 CONSTRAINT C2 NOT NULL Sage SMALLINT 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四个列级约束 四个列级约束 5 4 完整性约束命名子句 5 4 完整性约束命名子句 例 例13 修改表修改表Student中的约束条件 要求学号改为在中的约束条件 要求学号改为在900000 999999之间 年龄由小于之间 年龄由小于 30改为小于改为小于40 可以先删除原来的约束条件 再增加新的约束条件可以先删除原来的约束条件 再增加新的约束条件 ALTER TABLE Student DROP CONSTRAINT C1 ALTER TABLE Student ADD CONSTRAINT C1 CHECK Sno BETWEEN 900000 AND 999999 ALTER TABLE Student DROP CONSTRAINT C3 ALTER TABLE Student ADD CONSTRAINT C3 CHECK Sage 40 5 5 触发器触发器 5 5 触发器触发器 5 5 1 定义触发器定义触发器 5 5 2 激活触发器激活触发器 5 5 3 删除触发器删除触发器 5 5 1 定义触发器 5 5 1 定义触发器 5 5 1 定义触发器 5 5 1 定义触发器 6 触发条件 WHEN 指定触发器的触发条件 当满足触发条件时 DBMS才激发触发器 如果省略 则触发动作体在触发器激活后立 即执行 7 触发动作体 触发动作体可以是一个匿名PL SQL过程块 也可以是对已创建存储过程的调用 5 5 1 定义触发器 例2 定义一个BEFORE行级触发器 为教师表Teacher定义完整性规则 教授 的工资不得低于4000元 如果低于4000元 自动改为4000元 CREATE TRIGGER Insert Or Update Sal BEFORE INSERT OR UPDATE ON Teacher 触发事件是插入或更新操作 FOR EACH ROW 行级触发器 AS BEGIN 定义触发动作体 是PL SQL过程块 IF new Job 教授 AND new Sal 4000 THEN new Sal 4000 END IF END 例3 定义AFTER行级触发器 当教师表Teacher的工资发生变化后 就自动在工资变化表Sal log中增加一条相应记录 首先建立工资变化表Sal log CREATE TABLE Sal log Tno char 5 references Teacher Tno Sal numeric 7 2 Username char 10 Date datatime 例3 续 CREATE TRIGGER Insert Sal AFTER INSERT ON Teacher 触发事件是INSERT FOR EACH ROW AS BEGIN INSERT INTO Sal log VALUES new Tno new Sal CURRENT USER CURRENT TIMESTAMP END 例3 续 CREATE TRIGGER Update Sal AFTER UPDATE ON Teacher 触发事件是UPDATE FOR EACH ROW AS BEGIN IF new Sal old Sal THEN INSERT INTO Sal log VALUES new Tno new Sal CURRENT USER CURRENT TIMESTAMP END IF END 5 5 触发器 5 5 1 定义触发器 5 5 2 激活触发器 5 5 3 删除触发器 5 5 2 激活触发器 触发器的执行 是由触发事件激活的 并由数据库服务器自动执行 一个数据表上可能定义了多个触发器 同一个表上的多个触发器激活时遵循如下的执行顺序 1 执行该表上的BEFORE 触发器 2 激活触发器的SQL 语句 3 执行该表上的AFTER 触发器 例4 执行修改某个教师工资的SQL语句 激活上述定义的触发器 UPDATE Teacher SET Sal 800 WHERE Ename 陈平 执行顺序是 执行触发器Insert Or Update Sal 执行SQL语句 UPDATE Teacher SET Sal 800 WHERE Ename 陈平 执行触发器Insert Sa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论