触发器与数据库完整性控制
- 格式:doc
- 大小:78.50 KB
- 文档页数:5
第5章数据库完整性与安全性1. 什么是数据库的完整性?什么是数据库的安全性?两者之间有什么区别和联系?解:数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。
数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据的完整性和安全性是两个不同的概念,但是有一定的联系:前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取。
也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据.2。
什么是数据库的完整性约束条件?完整性约束条件可以分为哪几类?解:完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束.静态列级约束是对一个列的取值域的说明,包括以下几个方面:①数据类型的约束,包括数据的类型、长度、单位、精度等;②对数据格式的约束;③对取值范围或取值集合的约束;④对空值的约束;⑤其他约束.静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
常见的静态关系约束有:①实体完整性约束;②参照完整性约束;③函数依赖约束.动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:①修改列定义时的约束;②修改列值时的约束。
动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件.动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
3. 试述DBMS如何实现完整性控制.解:为了维护数据库的完整性,DBMS提供了以下三种机制:①完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件.SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。
数据库中数据完整性的维护与检验数据库是用来存储和组织大量数据的集合,它在现代信息化时代扮演着至关重要的角色。
而数据完整性是数据库管理中非常关键的一个方面,它指的是数据库中数据的准确性、一致性和有效性。
本文将探讨数据库中数据完整性的维护与检验方法,以确保数据库中数据的高度完整性。
在数据库中,数据完整性的维护是确保数据不受破坏、不受无效数据影响的重要手段。
首先,数据完整性需要确保数据库中的数据被正确地添加、更新和删除。
数据库管理系统(DBMS)通过约束来确保数据的完整性,其中包括以下几个主要的数据完整性规则:1. 实体完整性:每个表都应该有一个主键,并且此主键值不能为空。
这样可以保证在表中的每行数据都能够被唯一地标识和访问。
2. 参照完整性:参照完整性是指确保数据库中的外键与相关联的主键保持一致。
当涉及到多个表的关联查询时,参照完整性能够确保数据的一致性和准确性。
3. 域完整性:域完整性约束确保每个属性或列的取值满足特定的约束条件,例如数据类型、长度、范围或枚举值等。
这样可以防止非法或无效的数据进入数据库。
4. 用户定义的完整性:用户可以根据自己的需求定义特定的完整性规则。
通过定义触发器(trigger)、存储过程(stored procedure)或自定义函数(user-defined function),可以实现个性化的完整性约束。
除了数据完整性的维护,还需要对数据库的完整性进行检验以确保数据库中的数据的正确性。
数据库管理员可以采用以下方法来进行数据完整性的检验和校验:1. 合理的数据录入验证:在数据库中,为了提高数据的完整性,应该通过设置输入验证来限制用户输入的数据。
可以使用正则表达式、数据格式验证或输入的范围限制等方式,确保输入数据的合理性和准确性。
2. 定期进行数据备份:数据库管理员应制定定期的数据备份策略,并保障备份数据的安全性。
备份数据是数据完整性检验和恢复的一种重要手段,可确保在发生数据丢失时能够迅速恢复和修复数据库。
Oracle触发器trigger详解触发器相关概念及语法,供⼤家参考,具体内容如下概述本篇博⽂中主要探讨以下内容:什么是触发器触发器的应⽤场景触发器的语法触发器的类型案例数据:触发器的概念和第⼀个触发器数据库触发器是⼀个与表相关联的,存储的PL/SQL 语句。
每当⼀个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle⾃动执⾏触发器中定义的语句序列。
举个简单的例⼦:当员⼯表中新增⼀条记录后,⾃动打印“成功插⼊新员⼯”create or replace trigger insertStaffHintafter insert on xgj_testfor each rowdeclare-- local variables herebegindbms_output.put_line('新增员⼯成功');end insertStaffHint;触发器的应⽤场景复杂的安全性检查数据的确认数据库审计数据的备份和审计触发器的语法CREATE [OR REPLACE] TRIGGER trigger_name{BEFORE | AFTER }{INSERT | DELETE | UPDATE [OF column [, column …]]}[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]ON [schema.]table_name | [schema.]view_name[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}][FOR EACH ROW ][WHEN condition]PL/SQL_BLOCK | CALL procedure_name;其中:BEFORE 和AFTER指出触发器的触发时序分别为前触发和后触发⽅式,前触发是在执⾏触发事件之前触发当前所创建的触发器,后触发是在执⾏触发事件之后触发当前所创建的触发器。
.数据库概论专科作业题参考答案第一章数据库系统导论一、选择1.C2.B3.C4.A5.A6.A7.C8.A9.D10.D11.B12.B13.B14.C15.D16.C17.A18.D19.C20.B21.A22.C23.A24.C25.D26.D27.B28.B29.A30.C31.A32.D33.A34.C35.A36. A37.C38.D39.A40.D41.D42.D43.C44.A45.D46.B二、填空1.数据2.数据库3.数据库的恢复4.概念模型5.逻辑独立性6.关系数据7.层次8.数据定义9.网状模型10.完整性约束11.关系数据12.E-R13.一对多14.信息三、名词解释1.信息:经过加工处理后具有一定含义的数据集合,它具有超出事实数据本身之外的价值。
2.数据:数据库中存储的基本对象,通常指描述事物的符号。
3.数据库:存储在计算机存储设备上,结构化的相关数据集合。
它不仅包括描述事物的数据本身,还包括相关事物之间的联系。
4.数据库管理系统:处理数据访问的软件系统,也就是位于用户与操作系统之间的一层对数据库进行管理的软件。
用户必须通过数据库管理系统来统一管理和控制数据库中的数据。
5.数据库系统:引进了数据库技术后的计算机系统,它能够有组织地、动态地存储大量数据,提供数据处理和数据共享机制,一般由硬件系统、软件系统、数据库和人员组成。
6.实体:客观存在并可相互区别的事物称为实体。
7.属性:实体所具有的某一特征或性质称为属性。
8.联系:在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为两类:一类是实体内部的联系;另一类是实体之间的联系。
9.关键字:唯一地标识实体的属性集称为关键字。
10.实体型:用实体名及其属性名集合来抽象和描述同类实体,称为实体型。
11.实体集:同一类实体的集合称为实体集。
12.数据结构:数据结构是对数据静态特征的描述。
数据的静态特征包括数据的基本结构、数据间的联系13.数据操作:数据操作是指对数据动态特征的描述,包括对数据进行的操作及相关操作规则。
课程名称:数据库原理与应用授课教师:[教师姓名]授课班级:[班级名称]授课时间:[具体日期] 第[周次]节课时:2课时一、教学目标1. 知识目标:(1)理解触发器的概念、作用和类型。
(2)掌握触发器的创建、修改和删除方法。
(3)了解触发器在数据库中的应用场景。
2. 能力目标:(1)能够根据实际需求设计触发器。
(2)能够调试和优化触发器,提高数据库性能。
(3)能够解决触发器在应用过程中遇到的问题。
二、教学内容1. 触发器概述(1)触发器的概念(2)触发器的作用(3)触发器的类型2. 触发器的创建(1)触发器的语法结构(2)触发器的参数和条件(3)触发器的实现方式3. 触发器的修改和删除(1)修改触发器的语法结构(2)删除触发器的方法4. 触发器的应用场景(1)数据完整性约束(2)数据审计(3)自动执行业务逻辑三、教学过程1. 导入新课教师简要介绍触发器的概念和作用,激发学生的学习兴趣。
2. 讲授新课(1)触发器概述教师讲解触发器的概念、作用和类型,通过实例说明触发器的实际应用。
(2)触发器的创建教师演示触发器的创建过程,讲解触发器的语法结构、参数和条件,并指导学生进行实践操作。
(3)触发器的修改和删除教师讲解触发器的修改和删除方法,通过实例说明如何优化触发器,提高数据库性能。
(4)触发器的应用场景教师讲解触发器在数据完整性约束、数据审计和自动执行业务逻辑等方面的应用,引导学生思考触发器的实际应用。
3. 课堂练习教师布置练习题,要求学生在课下完成,巩固所学知识。
4. 课堂小结教师总结本节课的重点内容,强调触发器的实际应用和注意事项。
四、教学评价1. 学生对触发器的理解程度2. 学生对触发器创建、修改和删除的掌握程度3. 学生在课堂练习中的表现4. 学生对触发器应用场景的掌握程度五、教学资源1. 教材:《数据库原理与应用》2. 参考资料:相关数据库技术网站、学术论文等3. 教学课件:触发器概述、触发器创建、修改和删除、触发器应用场景等注:本教案模板仅供参考,教师可根据实际情况进行调整。
触发器与数据库完整性控制 【摘要】触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,任何用户对表的增、删、改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。触发器类似于约束,但是比约束更加灵活,可以实施比FOREIGN KEY约束、CHECK约束更为复杂的检查和操作,具有更精细和更强大的数据控制能力。
【关键词】SQL触发器,数据库完整性
一、绪论 数据库的完整性是为了保证数据库中存储的数据是正确的。所谓正确是指符合现实世界的语义。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。而当约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。例如:CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器;约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器;触发器也可以评估数据修改前后的表状态,并根据其差异采取对策;一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。 二、SQL触发器语法 1.定义触发器 CREATE TRIGGER (创建表的用户才可以创建触发器,名称唯一且与在同一模式下)
{BEFORE|AFTER} ON (当这个表的数据发生变化时激活触发事件)
FOR EACH {ROW|STATEMENT}(即定义行级触发器或语句级触发器) [WHEN ](触发器激活时,只有当触发条件为真时触发动作体才执行)
(既可以是一个匿名PL/SQL过程块,也可以是对已创建的存储过程的调用)
2.删除触发器 DROP TRIGGER ON (触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除)
三、SQL触发器在保持数据库完整性中的实际应用 在触发器的应用中,我们通常会用到两个特殊的表:inserted表和deleted表。它们都是针对当前触发器的局部表。这两个表与触发器所在表的结构完全相同,而且总是存储在高速缓存中。当触发DELETE触发器后,从受影响的表中删除的行的副本将被放置到deleted表中。同理当触发INSERT触发器后,inserted表中保存的是刚被插入的数据行的一个副本。
当一个触发器执行激发另一个触发器的操作,而另一个触发器又激发第三个触发器,如此等等,这时就发生了触发器的嵌套。也就是下文中用到的嵌套触发器。DML 触发器和 DDL 触发器最多可以嵌套 32 层。
下面以BBS论坛数据库中多个关联表的操作为例,阐述触发器在保持数据完整性、一致性中的应用。
在BBS的程序设计中,我们经常会碰到对一个数据表操作的同时,还要自动对另外几个相关联的数据表进行操作,以保证各数据表之间数据的完整性与一致性。BBS论坛中常用的数据表有:
BBS_User表(存储用户信息):用于存储用户信息。字段有用户名、密码、积分、发帖数、等级ID、最后一次发帖、qq、Email、头像、注册时间等;
BBS_Type表:用于存储大版块信息。字段有版块ID、版块名称等; BBS_LanMu表:存储分论坛信息。字段有分论坛ID、名称、所属大版块ID、主题总数、回复总数、版主等;
BBS_Topic表:存储帖子信息。字段有帖子ID、标题、内容、发帖人、所属分论坛ID、回复总数、点击总数、最后一次回贴时间、回帖人等;
BBS_Reply表:存储回复信息。字段有回复内容、回复人、回复的帖子ID、回复时间等。
在BBS论坛中,触发器主要应用于以下几种情况: 当用户在分论坛里发表帖子时,对BBS_Topic表进行操作,但同时要自动对分论坛表BBS_LanMu里面的论坛主题总数增1,还要更新BBS_User表给该用户增加相应的积分,当用户积分达到一定分数时,自动更新该用户的等级ID,表示该用户已经升了一个等级。
当用户回复帖子时,对BBS_Reply表操作的同时,也需要对分论坛表BBS_LanMu里的回复总数增1、对BBS_Topic表的回复总数增1并更新该表里的最后回帖标题和时间,还要将BBS_User表里的该用户的发帖数增1、自动增加相应积分、更新最后发帖标题和时间等;
在论坛的后台管理中,管理员有时需要添加或者删除一个大版块。当我们要删除BBS_Type表一个大版块时,为了保证数据库各表中数据的完整性与一致性,要同时对BBS_LanMu表、BBS_Topic表、BBS_Reply表中相关联的数据记录一并删除。
下面将以后台管理中对论坛大版块进行删除操作时应用触发器为例来进行具体介绍。
(1) 需求分析 在一个BBS中常见的论坛结构如图: 在一个论坛中有许多个大版块,每个版块又对应多个分论坛。每个论坛又对应多个帖子,每个帖子又对应多个回复信息。因此需要4个相关联的表来存储相应的信息:BBS_Type表(存储大版块信息)、BBS_LanMu表(存储分论坛信息)、BBS_Topic表(存储帖子信息)、BBS_Reply表(存储回复信息)。BBS_Type与BBS_LanMu、BBS_LanMu与BBS_Topic、BBS_Topic与BBS_Reply之间都是一对多的关系。
当我们要删除BBS_Type表一个大版块时,为了保证数据库各表中数据的完整性与一致性,需要同时对BBS_LanMu表、BBS_Topic表、BBS_Reply表中相关联的数据记录一并删除。因为这里面存在3对一对多的关系,如果在程序中或者存储过程实现,显然是很困难也是不合理的。根据触发器的作用以及这4个表之间的关系,采用嵌套触发器来实现这个删除功能。为BBS_Type表、BBS_LanMu表、BBS_Topic表分别建立一个AFTER触发器,该触发器由DELETE事件触发。采用嵌套触发器可以在数据库里自动完成这多个表中相关记录的删除,大大简化了业务逻辑。这样即保证了数据的完整性与一致性,又保证程序设计的合理性与方便性。
(2)创建触发器 根据需求分析,为BBS_Type表、BBS_LanMu表、BBS_Topic表分别建立AFTER触发器,该触发器由DELETE事件触发。建立在这3个表之上的触发器之间是嵌套触发的关系,即BBS_Type表上的触发器触发BBS_LanMu表上的触发器,BBS_LanMu表上的触发器再触发BBS_Topic表上的触发器。本文中使用的数据库为Microsoft SQL Server 2005。要让触发器能嵌套触发必须在数据库“属性”中,将“递归触发器已启用”设置为TRUE。
1.为BBS_Type表(存储大版块信息)建立触发器DelType。该触发器功能是删除BBS_LanMu表中属于刚删除的大版块的所有分论坛信息。
CREATE trigger [DelType] on [dbo].[BBS_Type] after delete as begin declare @typeid int select @typeid=TypeID from deleted --获得要被删除的版块ID delete from dbo.BBS_LanMu where Typeid=@typeid end 2.为BBS_LanMu表(存储分论坛信息)建立触发器DelLanmu。该触发器功能是删除BBS_Topic表中属于刚删除分论坛的所有帖子信息。 CREATE trigger [DelLanmu] on [dbo].[BBS_LanMu] AFTER DELETE as BEGIN declare @lmid int select @lmid=LMID from deleted --获得要被删除的分论坛ID delete from dbo.BBS_Topic where LMID=@lmid END 3.为BBS_Topic表(存储帖子信息)建立触发器DelTopic。该触发器功能是删除BBS_Reply表中属于刚删除帖子的所有回复信息。
CREATE trigger [DelTopic] on [dbo].[BBS_Topic] after delete as BEGIN declare @tid int select @tid=TID from deleted --获得要被删除的帖子ID delete from dbo.BBS_Reply where TID=@tid END 执行过程 触发器执行过程如图:
当数据操作层对数据表BBS_Type发出DELETE一条记录的时候,触发器DelType被触发,此触发器将删除BBS_LanMu表中属于刚删除的大版块的所有分论坛信息。
当DelType触发器对数据表BBS_LanMu删除一条记录时,又触发BBS_LanMu表上的触发器DelLanmu,此触发器将删除BBS_Topic表中属于刚删除分论坛的所有帖子信息。