版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库系统概论数据库系统概论 An Introduction to Database System 第五章第五章 数据库完整性数据库完整性 主要内容:本章主要介绍RDBMS完整性的实现机 制,包括完整性约束定义机制,完整性检查机制和违背 完整性约束条件时RDBMS应采取的动作。 重点和难点:理解实体完整性和参照完整性的概念, 以及DBMS是如何保证实体及参照完整性的。 数据库的完整性:数据的正确性正确性和相容性相容性。 数据的完整性和安全性是两个不同概念。 数据的完整性数据的完整性 防止数据库中存在不符合语义的数据,也就是防止数 据库中存在不正确的数据 防范对象:不合语义的、不正确的数据 数据
2、的安全性数据的安全性 保护数据库防止恶意的破坏和非法的存取 防范对象:非法用户和非法操作 为维护数据库的完整性,DBMS必须: 1.提供定义完整性约束条件的机制 2.提供完整性检查的方法 3.违约处理 5.1 实体完整性实体完整性 5.2 参照完整性参照完整性 5.3 用户定义的完整性用户定义的完整性 5.4 完整性约束命名字句完整性约束命名字句 5.6 触发器触发器 5.7 小结小结 5.1.1 实体完整性定义实体完整性定义 5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理 关系模型的实体完整性 CREATE TABLE中用PRIMARY KEY定义 单属性构成的码有两种说明方法
3、 定义为列级约束条件 定义为表级约束条件 对多个属性构成的码只有一种说明方法 定义为表级约束条件 例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)
4、, 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) /*只能在表级定义主 码*/ ); T增加主键约束的基本语法如下: ALTER TABLE table_name WITH CHECK|WITH NOCHECK ADD CONSTRAINT constraint_name PRIMARY KEY
5、CLUSTERED|NONCLUSTERED (column,n) WITH FILLFACTOR=filefactor ONfilegroup|DEFAULT 例:修改学生基本信息表STUDENT,为其添加主 键约束。 ALTER TABLE STUDENT ADD CONSTRAINT PK_ST PRIMARY KEY(SNO) GO 5.1.1 实体完整性定义实体完整性定义 5.1.2 实体完整性检查和违约处理实体完整性检查和违约处理 插入或对主码列进行更新操作时,RDBMS按照实 体完整性规则自动进行检查。包括: 1. 检查主码值是否唯一,如果不唯一则拒绝插入或修改 2. 检查主码的
6、各个属性是否为空,只要有一个为空就拒 绝插入或修改 检查记录中主码值是否唯一的方法: 全表扫描 索引 5.2.1 参照完整性定义参照完整性定义 5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理 关系模型的参照完整性定义 在CREATE TABLE中用FOREIGN KEY短语定义哪些 列为外码 用REFERENCES短语指明这些外码参照哪些表的主码 例如,关系SC中一个元组表示一个学生选修的某门课程的成 绩,(Sno,Cno)是主码。Sno,Cno分别参照引用 Student表的主码和Course表的主码 例3 定义SC中的参照完整性 CREATE TABLE SC (Sno CH
7、AR(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) /*在表级定义参照完整性*/ ); T修改表结构 ALTER TABLE table_name WITH CHECK|WITH NOCHECK ADD CONSTRAINT constraint_name FROE
8、IGN KEY (column,n) REFERENCES ref_table_name(ref_column,n) ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION NOT FOR REPLICATION T例:修改选课表SC,为其添加外键约束 GO ALTER TABLE SC ADD CONSTRAINT FK_ST FOREIGN KEY(SNO) REFERENCES STUDENT(SNO) GO 5.2.1 参照完整性定义参照完整性定义 5.2.2 参照完整性检查和违约处理参照完整性检查和违约处理 可能破坏参照完整性的
9、情况及违约处理 被参照表(例如Student ) 参照表(例如SC)违约处理 可能破坏参照完整性 插入元组拒绝 可能破坏参照完整性 修改外码值拒绝 删除元组 可能破坏参照完整 性 拒绝/级连删除/设置为 空值 修改主码值 可能破坏参照完整 性 拒绝/级连修改/设置为 空值 参照完整性违约处理 1. 拒绝(NO ACTION)执行 默认策略 2. 级联(CASCADE)操作 3. 设置为空值(SET-NULL) 对于参照完整性,除了应该定义外码,还应定义外码列是 否允许空值 例4 显式说明参照完整性的违约处理示例 CREATE TABLE SC (Sno CHAR(9) NOT NULL, Cn
10、o 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表中
11、的cno时,级联更新SC表中相应的元组*/ ); 用户定义的完整性就是针对某一具体应用的数据必须满足 的语义要求 RDBMS提供,而不必由应用程序承担 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), /
12、* 如果在表级定义实体完整性,隐含了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表的Ssex只允许取“男”或“女”。 CREATE TABLE Stud
13、ent (Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (男,女) ) , /*性别属性Ssex只允许取男或女 */ Sage SMALLINT, Sdept CHAR(20) ); 插入元组或修改属性的值时,RDBMS检查属性上的约束 条件是否被满足 如果不满足则操作被拒绝执行 在CREATE TABLE时可以用CHECK短语定义元组上的约 束条件,即元组级的限制 同属性值限制相比,元组级的限制可以设置不同属性之间 的取值的相互约束条件 例9 当学生的性别是男时,其名字不能以Ms.打头
14、。 CREATE TABLE Student (Sno CHAR(9), Sname CHAR(8) NOT NULL, Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20), PRIMARY KEY (Sno), CHECK (Ssex=女女 OR Sname NOT LIKE Ms.%) /*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/ ); 性别是女性的元组都能通过该项检查,因为Ssex=女成立; 当性别是男性时,要通过检查则名字一定不能以Ms.打头 插入元组或修改属性的值时,RDBMS检查元组上的约束 条件是否被满足 如果不满足则操作
15、被拒绝执行 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
16、(Sage 30), Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN ( 男,女), CONSTRAINT StudentKey PRIMARY KEY(Sno) ); 2. 修改表中的完整性限制修改表中的完整性限制 使用ALTER TABLE语句修改表中的完整性限制 例13 修改表Student中的约束条件,要求学号改为在 900000999999之间,年龄由小于30改为小于40 n可以先删除原来的约束条件,再增加新的约束条件 ALTER TABLE Student DROP CONSTRAINT C1; ALTER TABLE Student ADD C
17、ONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999), ALTER TABLE Student DROP CONSTRAINT C3; ALTER TABLE Student ADD CONSTRAINT C3 CHECK (Sage 40); 触发器(Trigger)是一种由事件驱动的特殊的存 储过程,当它被定义在表上时,可看作表的一部 分,一旦定义,任何用户当试图对表的增加、删 除或修改操作,都由服务器自动激活相应的触发 器,即触发器被请求(被触发)。在DBMS核心 层进行集中的完整性控制。 触发器的作用类似约束,但比约束更加灵活,可 以实施
18、比外键约束(FORGIGN KEY)、检查约 束(CHECK)更为复杂的操作,具有更为精细和 强大的控制能力。 触发器并不是SQL92标准中SQL规范的内容,但 很多关系数据库管理系统早就支持触发器,而不 同的关系数据库管理系统具体实现的语法各不相 同。 触发器基于表而建立时,它是一个高级形式的规 则,常用于执行更为复杂的数据约束。以防止对 数据进行不正确的、没有授权或不一致的修改。 当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行 触发器所定义的SQL 语句,从而确保对数据的处 理必须符合由这些SQL 语句所定义的规则。 触发器的
19、主要作用就是:能够实现由主键、外键 以及各种常规数据约束所不能保证的复杂的参照 完整性和数据的一致性。所以,触发器是一种确 保数据和业务完整性的较好方法。 触发器不同于存储过程,触发器主要是通过事件 进行触发而被执行,而存储过程则是通过存储过 程名而被直接调用。即触发器不能直接调用,也 不能有参数。 SQL Server 2005提供两大类触发器:DML触发 器和DDL触发器。其中DML触发器包括两种类型: AFTER触发器和INSTEAD OF触发器。 DML触发器是指当数据库服务器发生数据操作 语言(DML)事件时所要执行的操作。其用于 在数据被修改时,强制执行业务规则,以及扩 展SQL
20、Server 2005数据库约束。 DDL触发器是SQL Server 2005新增的功能,用 于在数据库中执行管理任务。它是一种特殊的触 发器,在响应数据定义语言(DDL)语句时被触 发。它主要应用于数据审计等工作,不属于数据 库基础使用范围。 TAFTER触发器 这种类型的触发器是指触发器只有在触发SQL语句中 指定的所有操作都已成功执行后才激发。所有的引用 级联操作和约束检查也必须成功完成后,才能执行此 触发器。换言之,AFTER触发器的行为是在数据修改触发器的行为是在数据修改 发生之后执行。发生之后执行。 该类型触发器要求只有执行某一操作如:INSERT、 UPDATE、DELETE之
21、后触发器才被触发,且只能在表 上定义。可以为针对表的同一操作定义多个触发器可以为针对表的同一操作定义多个触发器。 TINSTEAD OF触发器 从SQL Server 2000就引入了INSTEAD OF触发器。这 种触发器扩展了SQL Server的触发器功能,这类触发 器并不是执行激发其动作的SQL语句所定义的操作, 如INSERT、UPDATE、DELETE。而是执行触发器本 身的代码以替代其触发操作。换言之,INSTEAD OF 触发器可以越过触发操作语句而优先执行触发器触发器可以越过触发操作语句而优先执行触发器。 使用者既可在表上定义INSTEAD OF 触发器,也可以 在视图上定义
22、INSTEAD OF 触发器。但对同一操作只但对同一操作只 能定义一个能定义一个INSTEAD OF 触发器触发器。 使用SQL Server Management Studio创建触发器 使用T-SQL语句创建触发器 1.使用SQL Server Management Studio创建触发器 在SQL Server Management Studio的对象资源 管理器中,展开指定的服务器、数据库和要在 其上创建触发器的那个表,右击该表所属的触发 器文件夹,从弹出的快捷菜单中选择“新建触发器”选项, 则在右侧查询分析器窗口会出现触发器定义文本框架。 在该框架中合适位置填入触发器名称、创建触发器
23、的 SQL语句即完成了创建工作。 2.使用T-SQL语句创建触发器 CREATE TRIGGER语句必须是批处理语句中 的第一条语句 CREATE TRIGGER schema_name.trigger_name ON table | view WITH ENCRYPTION FOR | AFTER | INSTEAD OF INSERT , UPDATE , DELETE WITH APPEND NOT FOR REPLICATION AS IF UPDATE ( column ) AND | OR UPDATE ( column ) .n | IF ( COLUMNS_UPDATED (
24、) bitwise_operator updated_bitmask ) comparison_operator column_bitmask .n sql_statement .n 注意:在触发器中不能使用的注意:在触发器中不能使用的SQL命令有:命令有: ALTER DATABASE CREATE DATABASE DROP DATABASE LOAD DATABASE/LOAD LOG RECONFIGURE RESTORE DATABASE/RESTORE LOG IF UPDATE (column)可测试在指定的列上进行的 INSERT或UPDATE操作,可以指定多列。因为在ON子 句中指定了表名,所以在IF UPDATE子句中的列名前不 要包含表名。 u针对插入操作事件的触发器应用 u针对更新操作的触发器应用 uinstead of型触发器的应用 例:向teacher表插入记录,若职称为讲师, 工资低于3500的将工资调整为3500 例:如修改了sc表的成绩字段时,给予提示。 列级更新操作的触发器 在有些更新中,更新的内
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集美大学诚毅学院《环境与自然资源经济学》2025-2026学年期末试卷
- 福建农林大学金山学院《金融科技》2025-2026学年期末试卷
- 福建农林大学金山学院《工程材料》2025-2026学年期末试卷
- 2026年荆门市东宝区社区工作者招聘考试参考题库及答案解析
- 2026年洛阳市涧西区社区工作者招聘笔试备考试题及答案解析
- 2026年江门市蓬江区社区工作者招聘笔试模拟试题及答案解析
- 2026年沈阳市苏家屯区社区工作者招聘考试备考题库及答案解析
- 2026年威海市环翠区社区工作者招聘笔试参考试题及答案解析
- (新)设计院管理制度规章制度(3篇)
- 2026年四川省成都市社区工作者招聘考试备考试题及答案解析
- 2026年河南应用技术职业学院单招职业倾向性测试必刷测试卷带答案解析
- 生产车间标准操作流程SOP范本
- 国开2025年秋《农业推广》形成性考核1-3答案
- 五级应急救援员职业鉴定考试题库(含答案)
- 院内VTE预防护理新进展
- 单晶高温合金雀斑缺陷:形成机制、演化规律及对持久性能的影响探究
- 吊车专项施工方案(3篇)
- 防范围标串标行为操作指南
- 2024年伊犁州直法院机关招聘聘用制书记员考试真题
- 休闲农业与乡村旅游课件
- 2025年离婚抖音作品离婚协议书
评论
0/150
提交评论