第五章 数据库完整性 5.1 实体的完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名子句

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

数据库完整性 第 10 章 完整性约束条件 完整性控制 Oracle 的完整性. 什么是数据库的完整性  数据的正确性和相容性  防止不合语义的数据进入数据库 例 : 学生的年龄必须是整数,取值范围为 ; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系。
2010 年 6 月课件制作人:王亚楠 1 模块 2 项目开发概论 教学课件 年 6 月课件制作人:王亚楠 2 目录 目标 了解:数据库技术的基本概念与结构 理解:数据模型的分类与结构组成 掌握:关系数据库及 SQL 的基本理论 知识 掌握:数据库设计的方法与步骤 内容 2.1 数据库技术基础.
Chapter 3: SQL.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
1. SQL概述 2。DDL 3。DML DCL(第四部分安全性讲) 4。嵌入式使用 5。PL/SQL
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2章 SQL语言初步 2.1 SQL的基本概念 2.2 基本表、索引的创建、删除和修改操作 2.3 SQL的查询语句——SELECT
数据库系统概论 华中科技大学能源与动力工程学院
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
数据库技术及应用 ——SQL Server 任课教师: 毕丛娣 电话: 年3月.
第3章 SQL语言初步 2017/3/14.
Access数据库程序设计 总复习.
An Introduction to Database System
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
数据库原理及设计 --作业.
创建数据库 MySql创建数据库的语法: CREATE DATABASE 数据库名; 例: CREATE DATABASE mydb;
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
第5章 数据库保护 之事务.
软件设计师培训.
计算机应用基础 上海大学计算中心.
Database Principles & Applications
Oracle数据库 Oracle 子程序.
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
第7章 建立資料表與完整性限制條件 7-1 資料型別 7-2 資料表的建立 7-3 建立完整性限制條件 7-4 修改與刪除資料表
An Introduction to Database System An Introduction to Database System
第11章 详细设计.
数据库技术 第十章 数据库完整性 中国科学技术大学网络学院 阚卫华.
第四章:触发器   触发器类似于过程、函数,因为它们都是拥有说明部分、语句执行部分和异常处理部分的有名的PL/SQL块。与包类似,触发器必须存储在数据库中,并且不能被块进行本地化说明。但是,对于过程而言,可以从另一个块中通过过程调用显式地执行一个过程,同时在调用时可以传递参数。对于触发器而言,当触发事件发生时就会显式地执行该触发器,并且触发器不接受参数。
作业4讲评.
課程名稱:資料庫系統 授課老師:李春雄 博士
数据库技术 第三章 关系数据库标准语言SQL 中国科学技术大学网络学院 阚卫华.
第4章 SQL语言基础及数据库定义 4.1 基本概念 4.2 SQL Server 提供的主要数据类型 4.3 数据定义.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
An Introduction to Database System An Introduction to Database System
胡鹏 王慧锋 TEL: 数据库系统原理课程设计 实验环节1 胡鹏 王慧锋 TEL:
An Introduction to Database System An Introduction to Database System
第 7 章 建立資料表與 資料庫圖表.
教 师:曾晓东 电 话: 数据库技术 教 师:曾晓东 电 话:
第8章 数据库的安全和完整性约束 数据库的破坏一般来自: 1.系统故障; 2.并发所引起的数据不一致; 3.人为的破坏;
第 16 章 觸發程序.
課程名稱:資料庫系統 授課老師:李春雄 博士
課程名稱:資料庫系統 授課老師:李春雄 博士
建立/修改/刪除資料表 建立資料表 使用Enterprise Manager工具
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
国家“十一五”规划教材 数据库原理与应用教程(第3版).
第三章作业讲评 文洁 2012/4/10.
SQL SERVER 一些经典语句 1.
作业3-点评.
段磊 王慧锋 TEL: qq群: 数据库系统原理课程设计 实验环节2 段磊 王慧锋 TEL: qq群:
Ch4.SQL Server 2005資料庫組成員元件介紹
第七章 数据库的安全性与完整性 7.1 基本概念 7.2 数据库安全控制 7.3 数据库的完整性控制 7.4 触发器 本章小结.
实验二讲评 … 张榆….
数据库技术.
数据库技术与应用.
ORACLE 第九讲 触发器.
4.2 视图 (1) 视图是一个虚拟表,其内容来自对表查询的基础上。
SQL查询语句 蔡海洋.
第10章 触发器的创建和使用 10.1 触发器概述 10.2 创建触发器 10.3 修改触发器 10.4 删除触发器.
第三章 SQL Server数据管理.
第 7 章 建立資料表與資料庫圖表.
第4章 表的创建与维护 4.1 数据类型 4.2 数据完整性约束 4.3 创建数据表 4.4 修改数据表 4.5 删除数据表.
Visual Basic程序设计 第13章 访问数据库
第六讲 SQL语言之数据定义 第三讲 SQL Server 2000 数据库技术.
基于列存储的RDF数据管理 朱敏
第4章 数据查询.
Presentation transcript:

第五章 数据库完整性 5.1 实体的完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名子句 第五章 数据库完整性 5.1 实体的完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名子句 *5.5 约中的完整性限制 5.6 触发器 5.7 小结

一、什么是数据库的完整性 数据的正确性和相容性 防止不合语义的数据进入数据库。 例: 学生的年龄必须是整数,取值范围为14--29; 例: 学生的年龄必须是整数,取值范围为14--29; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在的系必须是学校开设的系; 完整性:真实地反映现实世界

二、DBMS的完整性控制机制 1. 定义功能 一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。 2. 检查功能 检查用户发出的操作请求是否违背了完整性约束条件 立即执行的约束(Immediate constraints) 语句执行完后立即检查是否违背完整性约束 延迟执行的约束(Deferred constrainsts) 完整性检查延迟到整个事务执行结束后进行 例:银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束 3. 违约反应 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 拒绝该操作 其他处理方法

5.1 实体完整性 一、实体完整性定义 实体完整性规则:关系中的码不能为空也不能重复。 5.1 实体完整性 一、实体完整性定义 实体完整性规则:关系中的码不能为空也不能重复。 定义方法:在CREATE TABLE中用PRIMARY KEY。 二、实体完整性检查和违约处理 检查:插入操作或更改码的值时。 处理:拒绝执行

5.2 参照完整性 一、参照完整性定义 参照完整性规则:关系中的外码或者取空值,或者等于被参照关系中某个元组的主码值。 5.2 参照完整性 一、参照完整性定义 参照完整性规则:关系中的外码或者取空值,或者等于被参照关系中某个元组的主码值。 定义方法:在CREATE TABLE中用FOREIGN KEY。 二、参照完整性检查和违约处理 检查:对参照表和被参照表进行增、删、改操作时,有可能破坏参照完整性,必须进行检查。 处理:见表5.1 表5.1 可能破坏参照完整性的情况及违约处理 被参照表 参照表 违约处理 可能被破坏完整性参照 插入元组 拒绝 修改主码值 删除元组 拒绝/级连删除/设置为空

1. 在被参照关系中删除元组时的问题 例:要删除Student关系中Sno=200215122的元组, 而SC关系中有4个元组的Sno都等于200215122 。 级联删除:将SC关系中所有4个Sno= 200215122的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去 受限删除:系统将拒绝执行此删除操作。 置空值删除:将SC关系中所有Sno= 200215122的元组的Sno值置为空值。 在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。

2. 在参照关系中插入元组时的问题 出现违约操作的情形 需要在参照关系中插入元组,而被参照关系不存在相应的元组。 违约反应 受限插入 递归插入 仅当被参照关系中存在相应的元组,其主码值与参照关系插入元组的外码值相同时,系统才执行插入操作,否则拒绝此操作。 首先向被参照关系中插入相应的元组,其主码值等于参照关系插入元组的外码值,然后向参照关系插入元组。 例:向SC关系插入( 200215125 ,1,90)元组,而Student关系中尚没有Sno= 200215125的学生 受限插入: 系统将拒绝向SC关系插入( 200215125 ,1,90)元组。 递归插入: 系统将首先向Student关系插入Sno= 200215125的元组,然后向SC关系插入( 200215125 ,1,90)元组。

3. 修改被参照关系中主码的问题 两种策略 (1) 允许修改主码 (2) 不允许修改主码

(1)允许修改主码策略 违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值。 要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值。 违约反应 (1):修改的关系是被参照关系:与删除类似 级连修改 受限修改 置空值修改 修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。 拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。 修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。 违约反应 (2) : 修改的关系是参照关系:与插入类似。 受限插入 递归插入

(1)允许修改主码策略 例:将Student关系中Sno= 200215123的元组中Sno值改为200215128。而SC关系中有 4个元组的Sno= 200215123 级联修改:将SC关系中4个Sno= 200215123元组中的Sno值也改为200215128 。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。 受限修改:只有SC中没有任何元组的Sno= 200215123时,才能修改 Student表中Sno= 200215123的元组的Sno值改为200215128 。 置空值修改:将Student表中Sno= 200215123的元组的Sno值改为 200215128 。而将SC表中所有Sno= 200215123的元组的Sno值置为空 值。 在学生选课数据库中只有第一种方法是正确的。

参照完整性的实现 RDBMS在实现参照完整性时: 需要向用户提供定义主码、外码的机制; 向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法; 一般地,当对参照表和被参照表的操作违反了参照完整性,系统选用默认策略,即拒绝执行。如果想让系统采用其它的策略则必须在创建表的时候显式说明。 [例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 ON UPDATE CASCADE, FOREIGN KEY (Cno) REFERENCES Course(Cno) ON DELETE ON ACTION ON UPDATE CASCADE, );

5.3 用户定义的完整性 一、属性上约束条件的定义 5.3 用户定义的完整性 一、属性上约束条件的定义 在CREATE TABLE中定义属性的同时可以根据应用要求,定义属性上的约束条件,即属性值的限制。 列值非空(NOT NULL) 列值唯一(UNIQUE) 检查列值是否满足一个布尔表达式(CHECK) [例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), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) );

[例6] 建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。 CREATE TABLE DEPT (Deptno NUMERIC(2) NOT NULL, Dname CHAR(9) UNIQUE, Location char(10), PRIMARY key (Deptno) ); [例7] Student表的Ssex 只允许取“男”或“女”。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK(Seex IN(‘男’,‘女’)), Sage SMALLINT, Sdept CHAR(20) );

[例8] SC表中的值应该在0和100之间。 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT CHECK(Grade>=0 AND Grade<=100), PRIMARY key (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno) REFERENCES Course(Cno) ); CREATE TABLE SC (Sno CHAR(9) NOT NULL,; Cno CHAR(4) NOT NULL, ; Grade int(3) CHECK(GRADE>=0 AND GRADE<=100),; PRIMARY key Sno+Cno tag kk,; FOREIGN KEY Sno tag k1 REFERENCES Student ,; FOREIGN KEY Cno tag k2 REFERENCES Course)

二、属性上的约束条件检查和违约处理——拒绝 三、元组上的约束条件定义 [例9] 当学生性别是男时不允许以Ms.打头。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK(Seex IN(‘男’,‘女’)), Sage SMALLINT, Sdept CHAR(20) CHECK (Seex=‘女’ OR Sname NOT LIKE ‘MS.%’ ); 四、元组上的约束条件检查和违约处理——拒绝

5.4 完整性约束命名子句 一、完整性约束命名子句 5.4 完整性约束命名子句 一、完整性约束命名子句 CONSTRAINT<完整性约束条件名> [PRIMARY KEY 短语|FOREIGN KEY短语|CHECK短语] [例10]建立学生登记表Student,要求学号在90000至99999之间,姓名不能为空,年龄<30,性别只能是‘男’或‘女’ 。 CREATE TABLE Student (Sno CHAR(6) CONSTRAINT C1 CHECK(Sno BETWEEN 90000 AND 99999), Sname CHAR(8) CONSTRAINT C2 NOT NULL, Sage NUMERIC(3) CONSTRAINT C3 CHECK(Sage<30) , Ssex CHAR(2) CONSTRAINT C4 CHECK(Seex IN(‘男’,‘女’)), CONSTRAINT StudentKey PRIMARY KEY(Sno) );

[例11] :建立教师表TEACHER,要求每个职工的应发工资不低于3000元。 应发工资实际上就是实发工资列Sal与扣除项Deduct之和。 CREATE TABLE TEACHER (Eno NUMBER(4) PRIMARY KEY, Ename CHAR(10), Job CHAR(8), Sal NUMBER(7,2), Deduct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS TEACHERKEY FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) CONSTRAINTS C1 CHECK (Sal + Deduct >=3000));

二、修改表中的完整性限制 [例12] 去掉[例10]中对性别的限制。 ALTER TABLE Student DROP CONSTRAINT C4; [例13] 修改表中的约束条件,要求学号改为在900000~999999之间年龄小于30改为小于40。 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 90000 0AND 999999) ; DROP CONSTRAINT C3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK(Sage <40) ;

二、修改表中的完整性限制 [例14]建立一个性别域,并声明性别取值的范围。 CREATE DOMAIN GenderDomain CHAR(2) CHECK(VALUE IN (‘男’,‘女’)); 这样[例10]中的说明可以改为:Seex GenderDomain

5.6 触发器 数据库触发器:是用户定义在关系表上的一类由事务驱动的特殊过程; 5.6 触发器 数据库触发器:是用户定义在关系表上的一类由事务驱动的特殊过程; 一旦定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发器,在核心层进行集中的完整性控制; 触发器类似于约束,但比约束更加灵活,可以实施比更为复杂的检查和操作,具有 更精细更强大的数据控制能力。 定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。

5.6 触发器 一、定义触发器 说明: VFP的定义触发器语句: 5.6 触发器 一、定义触发器 CREATE TRIGGER <触发器名>{BEFORE|AFTER} <触发事件> ON <表名> FOR FACH {BOW|STATEMENT} [WHEN <触发条件>] <触发动作体> 说明: 表的拥有者即创建表的用户才可以在表上创建触发器,并且一个表上只能创建一定数量的触发器; 触发器名可以包含模式名,也可以不包含模式名。同一模式下,触发器名必须是唯一 的,并且触发器名和<表名>必须在同一模式下; 表名是指当这个表数据发生变化时,将激活定义在该表上相应<触发事件> 的触发器; 触发事件可以是INSERT、DELETE和UPDATE,也可以是这几个事件的组合。UPDATE 后面还可以有OF<触发列,……>,即进一步指明修改哪些列时触发器激活。 触发类型:FOR EACH ROW(行级触发器)和FOR EACH STATEMENT(语句级触发器) VFP的定义触发器语句: CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression

5.6 触发器 [例18] 为教师表Teacher定义完整性规则 “教授的工资不得低于4000元,如果低于4000元,自动改为4000元” 5.6 触发器 [例18] 为教师表Teacher定义完整性规则 “教授的工资不得低于4000元,如果低于4000元,自动改为4000元” CREATE TRIGGER INSERT_OR_UPDATE_SAL BEFORE INSERT OR UPDATE ON Teacher FOR EACH ROW AS BEGIN IF (:new.Pos=‘教授’) AND (:new.sal<4000) THEN :new.Sal:=4000; END IF; END;

5.6 触发器 [例19] 当教师表Teacher中的工资发生变化后就自动在工资变化表SAL_LOG中增加一条相应的记录。

5.6 触发器 二、激活触发器 三、删除触发器 执行该表上的BEFORE触发器(多个时,按字母顺序); 激活触发器上的SQL语句; 5.6 触发器 二、激活触发器 触发器的执行是由事件激活的,并数据库服务器自动执行的。同一个表上定义的多个触发器激活时遵循如下的执行顺序: 执行该表上的BEFORE触发器(多个时,按字母顺序); 激活触发器上的SQL语句; 执行该表上的AFTER触发器(多个时,按字母顺序) 。 三、删除触发器 DROP TRIGGER <触发器名> ON <表名>