实训十 触发器的创建和使用
实验报告 10触发器的创建和使用
实验
进度
本次共有4个练习,完成4个。
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
本周跟随老师学习了触发器的创建和使用这一章的内容,课后仔细阅读教材和相关书籍,并上网查阅相关资料,对这一章的内容有了更深入的了解,认真完成了此次实验报告的4个练习,在实验的过程中,我在触发器的创建和使用这一环节中出现了一点小挫折,没有找到相应的SQL语句,通过跟同学讨论,跟老师交流得到了解决。下面是我的此次实验报告内容。
成绩
辽宁工程技术大学上机实验报告
实验名称
实验项目10触发器的创建和使用
院系
姓名
实验
目的
简述本次实验目的:
(1)理解触发器的概念、功能与工作原理。
(2)掌握创建触发器的方法。
(3)掌握查看、修改和删除触发器的方法。
(4)掌握利用触发器维护数据完整性的方法。
实验
准备
你为本次实验做了哪些准备:
(1)使用SQL Server 2005查询分析器和SSMS。
(13)删除触发器。
教师
评语
(10)使T数据库的Student表上创建一个名为S_T_delete_trigger的触发器,当执行DELETE操作时,该触发器被触发,禁止删除记录。
(12)修改触发器。
修改S_T数据库中Student表上建立的S_T_insert_trigger的触发器,当执行INSERT、UPDATE操作时,该触发器被触发,自动发出报警信息“禁止插入和修改!”。
触发器的创建和使用.ppt
④
10.2 创建触发器
10.2.2 使用SSMS来创建DML触发器
打开“新建触发器”模板窗口;
使用“查询”->“指定模板参数的值”,打开“替 换模板参数工具”,设置参数的具体值。
应用举例:
10.2 创建触发器
10.2.2 使用SSMS来创建DML触发器
例10-2-1 创建一个INSERT触发器 “TR_Stu_Insert”,当在T_STUDENT表中插入一条 新记录时,触发该触发器,并给出“你插入了一条 新记录!”的提示信息。 例10-2-2 创建一个TR_KC_NOTD触发器,当在 T_COURSE表中删除一条纪录时,触发该触发器,并 给出“不允许删除纪录!”的提示信息。 注意: 比较AFTER和INSTEAD OF触发器的执行顺序。
定义位置:数据表或视图 在每个数据表或视图上只能定义一个INSTEAD OF触 发器。
10.1 概述
10.1.4 特殊的临时表 插入表Inserted和删除表Deleted
这两个表动态驻留在内存中,不是存储在数据库中, 由系统管理,表的结构总是与被定义了触发器的表 相同。 主要保存因用户操作而被影响到的原数据值或新数 据值,用户只能引用表中的数据,不能对其修改。 当触发器工作完成后,这两个表的数据也被删除。
10.1 概述
10.1.3 触发器的类型
在SQL Server2005中触发器分为:
(二)DML触发器 在用户使用数据操作语言(DML)事件编辑数据时发 生。 DML事件是针对表或视图的INSERT、UPDATE 或 DELETE三种操作。 DML触发器有助于在表或视图中修改数据时强制业 务规则,扩展数据完整性。
10.1 概述
触发器认知实习报告
触发器认知实习报告一、前言触发器是数字电路中常见的一种基本电路,它能够在输入信号发生变化时产生输出信号的跃变。
本次实习的主要任务是理解和掌握触发器的工作原理,以及如何设计和实现触发器。
二、实习内容和过程实习的第一步是了解触发器的基本概念和分类。
触发器可以根据其工作原理和功能特点分为多种类型,如同步触发器、异步触发器、边沿触发器、计数触发器等。
在实习过程中,我通过阅读相关资料和教材,对触发器的分类和工作原理有了深入的了解。
接下来,我进行了触发器的设计和实现。
首先,我选择了同步触发器作为实习对象,因为它是最常见的一种触发器,其原理也比较简单。
我使用电路设计软件,根据同步触发器的电路图,设计出了一个同步触发器的电路。
然后,我使用实验设备,搭建了同步触发器的实验电路,并进行了实验验证。
通过实验,我进一步理解了同步触发器的工作原理和特性。
在设计同步触发器的基础上,我又进一步设计了异步触发器和边沿触发器。
异步触发器的工作原理与同步触发器不同,它不需要时钟信号的控制,而是根据输入信号的变化来产生输出信号的跃变。
边沿触发器则是一种特殊的触发器,它只能在输入信号的边沿时刻产生输出信号的跃变。
通过设计和实现这两种触发器,我对触发器的理解和掌握更加深入。
三、实习成果和收获通过本次实习,我深入理解了触发器的基本概念、分类和工作原理,掌握了触发器的设计和实现方法。
同时,我也通过实验验证了触发器的特性和性能,提高了自己的实验能力和动手能力。
实习过程中,我也发现了一些问题,如触发器的稳定性和抗干扰性等。
这些问题需要我在今后的学习和研究中进一步深入探讨和解决。
四、对未来工作的建议通过本次实习,我对触发器有了更深入的理解和掌握。
在今后的学习和工作中,我将继续深入研究触发器的相关理论和应用,提高自己的专业素养和技能水平。
同时,我也将注重实践能力的培养,不断丰富自己的实验经验和实践能力。
总之,本次实习是一次非常有意义的实践过程,我对触发器的理解和掌握有了很大的提高。
触发器的创建和使用
2011年12月31日
第3页
10.1 触发器 触发器(TRIGGER ['trigə] ) 触发器概述 DML触发器的创建和应用 触发器的创建和应用 DDL触发器的创建和应用 触发器的创建和应用 查看、 查看、修改和删除触发器
2011年12月31日
第4页
触发器概述
(1/4) )
触发器是一种特殊类型的存储过程。 触发器是一种特殊类型的存储过程。一般的存储 过程通过存储过程名称被直接调用, 过程通过存储过程名称被直接调用,而触发器 主要是通过当某个事件发生时自动被触发执行 触发器可以用于SQL Server约束 约束、 的。触发器可以用于SQL Server约束、默认 值和规则的完整性检查, 值和规则的完整性检查,还可以完成难以用普 通约束实现的复杂功能。 通约束实现的复杂功能。
2011年12月31日 第10页
DDL触发器是 触发器是Microsoft SQL Server 2005的 触发器是 的 新增功能。 服务器或数据库中发生 中发生数据定 新增功能。当服务器或数据库中发生数据定 义语言( 时将调用这些触发器。 义语言(DDL)事件时将调用这些触发器。 )事件时将调用这些触发器 DDL触发器与 触发器与DML触发器的相同之处在于都 触发器的相同之处 触发器与 触发器的相同之处在于都 需要触发事件进行触发,但是, 需要触发事件进行触发,但是,它与DML触 触 发器不同的是,它不会为响应针对表或视图 发器不同的是,它不会为响应针对表或视图 语句而触发, 的UPDATE、INSERT或DELETE语句而触发, 、 或 语句而触发 相反,它会为响应多种数据定义语言 多种数据定义语言( 相反,它会为响应多种数据定义语言(DDL) ) 语句( 语句(如:CREATE、ALTER)而触发。规 、 )而触发。 范数据库操作,防止数据库表结构被修改等。 范数据库操作,防止数据库表结构被修改等。
数据库触发器实验实训报告
一、实验背景随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。
数据库触发器作为数据库管理系统的重要组成部分,具有强大的功能,能够帮助用户实现复杂的数据操作和业务逻辑。
为了提高学生对数据库触发器的理解与应用能力,我们开展了数据库触发器实验实训。
二、实验目的1. 掌握触发器的概念、作用及分类;2. 熟悉触发器的创建、修改和删除操作;3. 学会使用触发器实现业务规则和数据完整性;4. 提高数据库编程能力,为以后的实际工作打下基础。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:Python四、实验内容1. 触发器的基本概念触发器是一种特殊的存储过程,它在特定事件发生时自动执行。
触发器可以分为两大类:DML触发器和DDL触发器。
DML触发器包括INSERT、UPDATE和DELETE触发器,用于在数据操作时执行特定的逻辑;DDL触发器用于在数据定义语言操作时执行特定的逻辑。
2. 触发器的创建以MySQL为例,创建触发器的语法如下:DELIMITER //CREATE TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;//DELIMITER ;例如,创建一个名为before_insert_trigger的触发器,在向bookinfo表插入数据之前执行:DELIMITER //CREATE TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 100 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 100';END IF;END;//DELIMITER ;3. 触发器的修改修改触发器的语法与创建触发器类似,只需要使用ALTER TRIGGER语句:ALTER TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;例如,修改上述触发器,限制书籍价格不超过50元:DELIMITER //ALTER TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 50 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 50';END IF;END;//DELIMITER ;4. 触发器的删除删除触发器的语法如下:DROP TRIGGER IF EXISTS 触发器名称;例如,删除上述触发器:DROP TRIGGER IF EXISTS before_insert_trigger;5. 触发器与存储过程的区别触发器和存储过程都是数据库编程的重要工具,但它们之间存在一些区别:(1)触发器在特定事件发生时自动执行,而存储过程需要手动调用;(2)触发器只能包含一个语句块,而存储过程可以包含多个语句块;(3)触发器不能返回结果集,而存储过程可以返回结果集。
数据库《创建和使用触发器》实验报告
x x大学计算机与信息技术学院实验报告姓名学号专业班级课程名称数据库系统概论实验日期成绩指导教师批改日期实验名称创建和使用触发器实验内容[目的和意义]理解触发器的触发过程和类型,掌握创建触发器的方法。
[实验内容]掌握使用对象资源管理器和Transact-SQL语句两种方法创建触发器。
[实现步骤]启动SSMS,链接到数据库实例,在“对象资源管理器”窗口里,选择“数据库实例”,→“数据库”→“学生管理系统”→“表”→“Student”→“触发器”右键快捷菜单的“新建触发器”,打开“创建触发器”模板,如图5-1所示。
在“创建触发器”模板中,修改代码,或者选择“查询”→“指定参数模板”选项,打开“指定模板参数的值”,指定模板参数后,在模板里修改其他代码,如图5-2。
然后单击“运行”按钮,完成触发器的创建。
当输入Insert into Student1 values (2007241082 ‘王阳’‘男’ 36 ‘计算机’);建立的触发器执行了其功能。
例2:create trigger sson studentfor insertasbegindeclare@xh smallint;select@xh=inserted.Sagefrom inserted;if exists(select sno from student where Sage=@xh) update student set sage=@xh+1 where Sage=@xh; end;当执行以下语句时insert into studentvalues('200515124','zp','男',20,'ma');结果中Sage为20的元组都加上了1。
例3:创建触发器:执行SQL语句:结果使student表中的所有元组的sage均变为20:。
数据库头歌实训触发器的创建和使用
数据库头歌实训触发器的创建和使用数据库头歌是一款广泛应用于企业和个人的开源数据库管理系统软件,其功能强大并且易于使用。
在实际应用中,触发器是数据库头歌中一个重要的功能,可以在特定的数据库操作时自动执行一系列的动作,对数据库进行监控和管理。
本文将介绍数据库头歌实训触发器的创建和使用方法,帮助读者更好地理解和应用触发器功能。
一、触发器的概念和作用触发器是一种特殊的存储过程,它在特定的数据库操作(如插入、更新、删除)发生时自动触发执行。
触发器可以用于监控数据库的变化,执行一些自定义的操作,或者实现数据的约束和一致性。
在实际应用中,触发器常常用于记录数据变更历史、更新相关表的数据、进行数据校验等方面。
二、创建触发器的语法和步骤在数据库头歌中,创建触发器需要遵循一定的语法和步骤,下面是创建触发器的基本语法:CREATE TRIGGER trigger_nameBEFORE/AFTER INSERT/UPDATE/DELETE ON table_nameFOR EACH ROWBEGIN-- 触发器逻辑代码END;其中,trigger_name是触发器的名称,table_name是触发器所属的表,BEFORE/AFTER指定触发器在数据操作之前或之后执行,INSERT/UPDATE/DELETE指定触发器监控的数据库操作类型,FOR EACH ROW表示每行数据发生操作时触发。
触发器逻辑代码可以是一系列的SQL语句,用于处理触发器监控的数据库操作。
创建触发器的步骤如下:1. 连接数据库头歌,选择要创建触发器的数据库。
2. 使用CREATE TRIGGER语句创建触发器,指定触发器的名称、所属表、触发时机和逻辑代码。
3. 执行CREATE TRIGGER语句,成功创建触发器。
三、触发器的使用示例下面通过一个具体的示例来演示数据库头歌实训触发器的创建和使用。
假设有一个学生表(student)和一个成绩表(score),我们希望在学生表插入新记录时自动在成绩表中插入一条初始成绩记录,可以通过触发器来实现这一功能。
触发器——实验报告
触发器——实验报告本次实验主要针对的是数据库的触发器,触发器可以在数据库中对指定的事件进行响应,可以在事件发生前或发生后对相关的SQL语句进行处理,从而实现对数据的限制、约束等相关操作。
本次实验的目标是通过实例了解什么是触发器,如何创建触发器以及触发器的应用。
一、实验环境本次实验使用MySQL数据库作为实验环境。
二、实验步骤1. 创建数据库和表结构首先,需要创建一个新的数据库,并新建一张表来进行触发器的测试。
这里,我们创建一个名为“students”的数据库和“grades”表。
表结构如下:CREATE TABLE grades(id int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;2. 创建触发器接下来,我们要创建一个触发器来对数据进行限制。
比如,我们想对成绩的输入进行限制,限制只能输入0-100之间的分数。
创建触发器的语法如下:CREATE TRIGGER trigger_name{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_nameFOR EACH ROWBEGIN-- 触发器的处理END;以上语法中,trigger_name是触发器的名称,table_name是触发器所作用的表名,BEFORE或AFTER关键字表明触发器是在事件发生前还是发生后进行处理的,在本次实验中,我们使用BEFORE关键字,表示在事件发生前进行处理。
触发器可以应用在INSERT、UPDATE、DELETE事件上,我们用INSERT事件做例子,表示在插入数据之前实现相应的数据限制。
触发器中的处理代码可以是任何合法的SQL语句,其中可以使用NEW和OLD关键字来引用触发器作用的记录,NEW表示要插入或者修改的记录,OLD表示删除的记录。
触发器的创建和使用
触发器是一种特殊的存储过程,常常用于强制 操作业务规则和数据完整性约束。 DDL触发器在数据库表上创建,当该表发生触 发器所定义的事件如修改数据(UPDATE)、插入 (INSERT)数据或删除(DELETE)数据前后,触 发器会自动执行所定义的操作 DML触发器是对数据库对象创建(CREATE)、 删除(DROP)和修改(ALTER)等操作时所定义 的一种触发器,其主要功能是防止或响应对数据库 架构进行修改,记录数据库架构中的更改和事件等, 是SQL Server 2005新功能。
10.3 修改触发器
方法1:使用“SQL Server Management Studio” 修改触发器
10.3 修改触发器
方法2:使用“Transact-SQL” 修改触发器
ALTER TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] } CREATE TRIGGER DDLtrigger ON DATABASE FOR DROP_TABLE AS PRINT 'DDL触发器被 触发!' ROLLBACK
10.2 创建触发器
方法1:使用“SQL Server Management Studio” 创建触发器
10.2 创建触发器
方法2:使用“Transact-SQL” 创建触发器
实验十 触发器的创建和使用
实验十触发器的创建和使用
一、实验目的
1)理解触发器的概念与类型
2)理解触发器的功能及工作原理
3)掌握创建、修改和删除触发器的方法
4)掌握利用触发器维护数据完整性的方法
二、实验内容
触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行UPDATE、INSERT、DELETE语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的修改。
1)使用T-SQL语句创建一个DELETE触发器,完成的功能是当在Categories 表中删除记录时,检测Products表中是否存在相关的记录,如果存在,则给出提示信息“不能删除该条记录”;如果不存在,则删除该条记录。
CREATE TRIGGER TRG_CATEGORIES ON CATEGORIES
FOR DELETE
AS
BEGIN
DECLARE @ID CHAR(10)
SELECT @ID=CATEGORYID FORM INSERTED
IF EXIST(SELECT * FROM PRODUCTS WHERE CATEGORYID=@ID)
BEGIN
PRINT ‘不能删除该条记录’
ROLLBACK TRAN
END
END
2)基于Salers表创建一个触发器,针对INSERT、DELETE、UPDATE操作。
当执行INSERT、UPDATE语句时,将inserted表中的数据打印出来当执行DELETE、UPDATE语句时,将deleted表中的数据打印出来。
3)使用系统存储过程修改触发器的名称。
4)删除上题创建的触发器。
三、分析与讨论
触发器主要用于实施什么类型的数据完整性?。
第10章 触发器的创建与使用
自动执行。
利用触发器可以保证表中数据的一致性和完整性,
功能比约束更强。
2013-7-9
本章学习目标
了解触发器的概念和优点
理解触发器的工作原理
熟练掌握如何创建INSERT触发器、UPDATE触发器、
DELETE触发器
掌握如何查看、修改和删除触发器
2013-7-9
第10章 触发器的创建和使用
10.1 概述
(1)产生跟踪敏感信息的审核表 CREATE TABLE auditUsers(
audit_Id int identity(1,1) primary key,
--审计编号,标识列
--审计数据类型:OLD为修改前数据,NEW为修改后数据 Auit_Type char(3) not null,
Uid int not null,
触发器的主要优点:
触发器是自动执行的,不需要管理员手动维护数据库 的数据完整性。 触发器可以对数据库中的相关表进行级联更改。例如, 可以在 “院系”表中定义触发器,当用户删除表“院系” 中的记录时,触发器将删除 “学生”表和“教师”表中 对应院系的记录。 触发器可以限制向表中插入无效的数据,与CHECK 约束的功能相似。但在CHECK约束中不能使用到其他表 中的字段,而在触发器中则没有此限制。
else
update n set num=num+1,woman=isnull(woman,0)+1 where dnum=@dnum end 2013-7-9
方法一:用企业管理器创建触发器
2013-7-9
如何验证触发器是否正常工作?
课堂练习: 1、利用SQL语句在S表上创建触发器(例1.txt); 2、观察N表中的统计数据并进行记录; 3、利用企业管理器在S表中插入一条记录; 4、观察N表中的统计数据是否自动发生变化;
实训指导书(10)触发器
实训10 触发器1、实训目的(1)理解触发器的作用(2)掌握创建触发器的方法;(3)掌握查看触发器信息的方法;(4)掌握删除和修改触发器的方法。
2、素材准备SQL Server 2005,Xk数据库,YGGL数据库。
实验准备:1)创建用于企业管理的员工管理数据库,数据库名为YGGL,包含员工的信息、部门信息以及员工的薪水信息。
数据库YGGL包含下列3个表:(1)employees:员工信息表。
(2)departments:部门信息表。
(3)salary:员工薪水情况表。
各表的结构如下:employees表结构2)在企业管理器中向表employees,departments、salary中加入记录employees表departments表salary表3、实训内容3.1基本训练1、完成教材中的例题。
(50分钟)2、对于yggl数据库,表employees的departmentid列与表departments的departmentid列应满足参照完整性规则,即:●向employees表添加一记录时,该记录的departmentid值在departments表中应存在。
●修改departments表的departmentid字段值时,该字段在employees表中的对应值也应该修改。
●删除departments表中一记录时,该记录的departmentid字段值在employees表中对应的记录也应该删除。
上述参照完整性规则,在此通过触发器实现。
3、对于yggl数据库,表employees的employeeid列与表salary的employeeid列应该满足参照完整性规则,请用触发器实现两个表间的参照完整性。
●向salary表添加一记录时,该记录的employeeid值在employees表中应存在。
●修改employees表的employeeid字段值时,该字段在salary表中的对应值也应该修改。
第10章 触发器的创建和使用
10.2.2 使用Transaபைடு நூலகம்t-SQL语句创建 DML触发器
其中,各参数的说明如下:
schema_name:DML触发器所属架构的名称。 trigger_name:触发器的名称。
table | view:对其执行DML触发器的表或视图。
WITH ENCRYPTION:对CREATE TRIGGER语句 的文本进行加密处理。
10.2 创建触发器
在创建触发器之前应该考虑以下几个问题:
CREATE TRIGGER 必须是批处理中的第一
条语句。 触发器只能在当前的数据库中创建。 TRUNCATE TABLE 语句不会引发 DELETE 触发器。 WRITETEXT 语 句 不 会 引 发 INSERT 或 UPDATE触发器。
10.2.2 使用Transact-SQL语句创建 DML触发器
使 用 Transact-SQL 语 言 中 的 CREATE TRIGGER 命令也可以创建DML触发器: CREATE TRIGGER [ schema_name . ]trigger_name ON { table | view } [ WITH <dml_trigger_option> [ ,...n ] ]{ FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] } AS { sql_statement [ ; ] [ ,...n ] } <dml_trigger_option> ::=[ ENCRYPTION ] [ EXECUTE AS Clause ]
10.2.2 使用Transact-SQL语句创建 DML触发器
第10章 触发器的创建和使用new
定义位置:数据表或视图 在每个数据表或视图上只能定义一个INSTEAD OF触 发器。
10.1 概述
10.1.4 特殊的临时表 插入表Inserted和删除表Deleted
这两个表动态驻留在内存中,不是存储在数据库中, 由系统管理,表的结构总是与被定义了触发器的表 相同。 主要保存因用户操作而被影响到的原数据值或新数 据值,用户只能引用表中的数据,不能对其修改。 当触发器工作完成后,这两个表的数据也被删除。
(二)UPDATE()函数 参数:表中列名 功能:确定INSERT或UPDATE语句是否影响表 中的特定列。 返回值:TRUE或FALSE 例如:UPDATE(S_NUMBER)
10.2 创建触发器
10.2.3 使用T-SQL来创建DML触发器
例10-2-3 在T_SCORE表上创建一个插入、更新类 型的触发器TR_KS_CJ,当在SCORE字段中插入或修 改考试成绩后,触发该触发器,检查成绩是否在0100之间,若不在该范围,则撤销插入和修改操作。 分析: 1、触发器类型 2、如何判断修改了SCORE字段? 3、如何撤销操作?——事务回滚(RollBack)
CREATE TRIGGER TR_KS_CJ ON T_SCORE AFTER INSERT,UPDATE AS
10.2 创建触发器
IF UPDATE(SCORE) BEGIN print '开始检查Score……' declare @cj int select @cj=SCORE from inserted if @cj>100 or @cj<0 begin print 'score有误,重新插入记录!' rollback end else print '插入或修改成功!' END
触发器的创建与使用
03
02
触发器:是一种数据库对象,用于在数据库 表上自动执行特定操作。
04
使用场景
触发器:用于处理复杂的业务逻辑,如数 据验证、数据同步等。
05
06
视图:用于简化复杂的SQL查询,提供给 用户一个简化的数据视图。
触发器与函数
定义与功能 触发器:是一种特殊的存储过程,用 于在数据库表上自动执行特定操作。
触发器的作用
1 2
数据完整性维护
触发器可以用于确保数据的完整性和准确性,通 过在数据修改前后自动执行验证逻辑。
自动日志记录
触发器可以用于自动记录数据修改事件,如记录 数据修改的时间、修改前后的数据状态等。
3
自动级联操作
触发器可以用于自动执行级联操作,例如在删除 某个表中的记录时,自动删除与之关联的其他表 中的记录。
安全性
简化业务逻辑
触发器可以用于实施安全策略,例如限制 对敏感数据的访问或强制执行某些操作。
在某些情况下,触发器可以帮助简化业务 逻辑,减少应用程序中的代码量。
触发器的缺点
性能问题
触发器在数据库操作中会增加额外的执 行时间,特别是在高并发的系统中,可
能会影响性能。
难以管理
随着触发器的数量增加,管理它们会 变得更加困难,尤其是在大型系统中。
自动化任务执行
在特定时间或条件下自动执行某些任务,例如发送邮件、更新数 据库等。
数据验证
在数据插入、更新或删除之前,对数据进行验证,确保数据符合 预设规则。
事件响应
对特定事件或操作进行响应,例如用户登录、订单创建等。
如何使用触发器
01
创建触发器
根据需求,在数据库中创建相应的 触发器。
实训十触发器的创建和使用
实训⼗触发器的创建和使⽤⽹络数据库实训报告⽇期:2010 年12 ⽉17 ⽇班级:09级计算机信息管理⼀、实训⽬的和要求1、理解触发器的作⽤;2、了解触发器和⼀般存储过程的区别;3、掌握创建、修改及删除触发器的⽅法;4、理解触发器执⾏的过程。
⼆、实训所需仪器、设备硬件:计算机软件:操作系统Windows XP、SQL Server 2005三、实训内容(⼀)简单触发器的创建和使⽤1、在student数据库中t_course表创建⼀名为myt1的AFTER触发器,要求实现以下功能:当插⼊⼀条记录后提⽰“已插⼊⼀条新记录”,并验证此触发器。
use student gocreate trigger myt1on t_coursefor insertasdeclare @msg char(30)set @msg='已插⼊⼀条新记录'print @msg--验证use studentgoinsert into t_course(c_number,c_name,hours,credit)values('123456','语⽂','70','2')go2、在student数据库中t_course表创建⼀名为myt2的AFTER触发器,要求实现以下功能:当删除⼀条记录后提⽰“已删除⼀条记录”,并验证此触发器。
use student gocreate trigger myt2on t_coursefor deleteasprint'已删除⼀条记录'--验证use studentgodelete from t_course where c_number='123456'go3、在student数据库中t_course表创建⼀名为myt3的AFTER触发器,要求实现以下功能:当修改⼀条记录后提⽰“已修改⼀条记录”,并验证此触发器。
第10章 触发器的创建和使用——例题解答
第10章触发器的创建和使用——例题解答例10-2-1:创建一个INSERT触发器“TR_Stu_Insert”,当在T_STUDENT表中插入一条新记录时,触发该触发器,并给出“你插入了一条新记录!”的提示信息。
实现本题的方法如下:步骤一:在SQL Server管理控制台中,展开STUDENT数据库,右击T_STUDENT表中的“触发器”文件夹。
从弹出的快捷菜单中选择“新建触发器”选项。
步骤二:单击“查询”菜单中的“指定模板参数的值”菜单项,在“指定模板参数的值”对话框中,将参数“Schema_Name”的值修改为“dbo”,参数“Trigger_Name”的值修改为“TR_Stu_Insert”,参数“Table_Name”的值修改为“T_STUDENT”,参数“Data_Modification_Statements”的值修改为“INSERT”。
单击“确定”按钮。
步骤三:在新建触发器模板窗口中,在BEGIN和END语句之间输入以下3条语句:DECLARE @msg char(30)SET @msg='你插入了一条新记录!'PRINT @msg步骤四:单击工具栏上的“执行”按钮,即可完成此触发器的创建。
例10-2-2:创建了Stu_Insert触发器后,查看向T_STUDENT表中插入数据时,此触发器所完成的功能。
在SQL Server管理控制台中新建一个查询,并输入以下SQL语句:USE STUDENTGOinsert into T_STUDENT(S_NUMBER,S_NAME,SEX)values('0554115','王小帆','女')GO例10-2-3:创建一个AFTER触发器,要求实现以下功能:在T_SCORE表上创建一个SQL Server 2005实用教程插入、更新类型的触发器TR_ScoreCheck,当在SCORE字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训十触发器的创建和使用
一、实训目的
1. 理解触发器的作用;
2. 了解触发器和一般存储过程的区别;
3. 掌握创建、修改及删除触发器的方法;
4. 理解触发器执行的过程。
二、实训步骤
(一) 简单触发器的创建和使用
1.在student数据库中t_course表创建一名为myt1的AFTER触发器,要求实现以
下功能:当插入一条记录后提示“已插入一条新记录”,并验证此触发器。
2.在student数据库中t_course表创建一名为myt2的AFTER触发器,要求实现以
下功能:当删除一条记录后提示“已删除一条记录”,并验证此触发器。
3.在student数据库中t_course表创建一名为myt3的AFTER触发器,要求实现以
下功能:当修改一条记录后提示“已修改一条记录”,并验证此触发器。
4.在student数据库中t_course表创建一名为myt4的INSTEAD OF触发器,要求
实现以下功能:当删除一条记录之前提示“不能删除此表的记录!”,并验证此触发器,检查是否能删除此表的记录。
5.删除以上创建的所有触发器。
(二) 较复杂的触发器的创建和使用
1. 创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新
类型的触发器scoreCheck,当在score字段中插入或修改考试分数后,触发该触发器,检查分数是否在0至100分之间。
(参考教材P186的例10-3,运行后发现尽管分数不在0至100分之间,但还是能够插入和修改)
2. 创建一个AFTER触发器,要求实现以下功能:在t_score表上创建一个插入更新
类型的触发器scoreCheck2,当在score字段中插入或修改考试分数后,触发该触发器,检查分数是否在0至100分之间,若不在,则不能插入或修改,并给出提示。
代码段如下:
CREATE TRIGGER scoreCheck2
ON t_score
FOR insert, update
AS
declare @ScoreValue as int
select @ScoreValue =(select score from inserted)
if @ScoreValue <0 or @ScoreValue >100
begin
rollback transaction
print '数据不正确不能修改'
end
验证上面创建的触发器,检查当输入的分数不在0到100之间,能否保存分数。
此功能的实现是依赖代码段的黑体字标识的语句rollback transaction来实现的,其作用是回滚变动的数据。
教材没有此语句。
3.根据教材第4章P68创建一个检查约束,实现上述2的功能。
体会触发器与检查
约束功能上的相似之处。
4.在student数据库中t_course表创建一名为twofield的AFTER触发器,要求实
现以下功能:当在hours(学时)和credit(学分)字段插入或修改学时或学分后,触发该触发器,检查学时是否是大于0小于200的整数,并且学分是否是大于0小于10的实数,若不满足这两个条件,则不允许插入或修改,并给出提示。
CREATE TRIGGER twofield
ON t_course
FOR insert, update
AS
declare @h as int,
@c as real
select @h =(select hours from inserted)
select @c =(select credit from inserted)
if @h<0 or @h>200 or @c<0 or @c>10
begin
rollback transaction
print '数据不正确不能修改'
end
5.根据教材第4章P68创建一个检查约束,实现上述4的功能。
体会触发器与检查
约束功能上的相似之处。
6.创建一个AFTER触发器,要求实现以下功能:在t_student表上创建一个删除类
型的触发器stu_delete,当在t_student表中删除某一条记录后,触发该触发器,在t_score表中删除与此学号对应的记录。
(参考教材P187的例10-4)
7.分析能用外键约束实现上述6的功能吗?由此体会触发器与外键约束的不同之外
处。
8.创建一个INSERT触发器,完成的功能是当在t_score表中插入或修改s_number
列的数据时,检测t_student表中是否存在相应的s_number值,如果不存在,则不允许插入和修改,并给出相应的提示信息。
提示:代码段如下:
CREATE TRIGGER newt
ON t_score
FOR INSERT, UPDATE
AS
declare @t as char(10)
select @t =(select s_number from inserted)
if @t in (select s_number from t_student)
print '已插入或修改'
else
begin
rollback transaction
print '学生信息表中不存在该学号,所以不能插入或修改'
end
三、思考题
1.简述触发器与存储过程的区别。
2.简述触发器的作用。
3.简述触发器与检查约束的相同和不同的地方。
4.简述AFTER触发器与INSTEAD OF触发器的区别。