数据库原理实验报告S11-数据库触发器的创建
触发器实验报告
数据库原理及应用实验报告成绩:__________________________一、实验目的1.了解触发器的概念、优点2.掌握触发器的方法和步骤3.掌握触发器的使用二、实验平台Windows xp系统、oracle数据库三、实验步骤、出现的问题及解决方案(不能解决的将问题列出)1)实验步骤1、通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
创建序列所用代码及运行截图:create sequence SEQ_borrIDMAXVALUE 1.0E28Start With5INCREMENT By1CACHE20order;创建触发器所用代码及运行截图:create or replace trigger tri_borrowbefore Insert On借阅For Each RowBeginSelect SEQ_borrID.Nextval Into :new.借阅流水号From DUAL;End;测试触发器所用代码及运行截图:insertinto借阅(借书证号,图书编号,借书日期)values(20081237,1005050,to_date('2002-08-26','yyyy/mm/dd'));测试结果截图:2、通过序列和触发器实现预约表中预约流水号字段的自动递增创建序列所用代码及运行截图:create sequence SEQ_reserIDMAXVALUE 1.0E28Start With1INCREMENT By1CACHE20order;创建触发器所用代码及运行截图:Create or Replace Trigger tri_reserBefore Insert On预约For Each RowBeginSelect SEQ_reserID.Nextval Into :new.预约流水号From DUAL;End;测试触发器所用代码及运行截图:insertinto预约(借书证号,ISBN,预约时间)values(20062001,9787506336239,to_date('2002-08-26','yyyy/mm/dd'));测试结果截图:3、修改实验三借书功能的存储过程。
数据库触发器实验
数据库触发器实验创建基于表的触发器。
--删除已经存在的表T_TRIG。
DROP TABLE IF EXISTS T_TRIG;--删除已经存在的表T_TRIG_LOG。
DROP TABLE IF EXISTS T_TRIG_LOG;--删除已经存在的序列TRIG_LOG_SEQ。
DROP SEQUENCE IF EXISTS TRIG_LOG_SEQ;--删除已经存在的触发器TRIG_AFTER_INSERT。
DROP TRIGGER IF EXISTS TRIG_AFTER_INSERT;--删除已经存在的触发器TRIG_BEFORE_INSERT。
DROP TRIGGER IF EXISTS TRIG_BEFORE_INSERT;--创建表T_TRIG。
CREATE TABLE T_TRIG (ID INT, CREATE_DATE TIMESTAMP);--创建表T_TRIG_LOG。
CREATE TABLE T_TRIG_LOG (LOG_SEQ INT,LOG_DESC VARCHAR(30), CREATE_DATE TIMESTAMP);--创建序列TRIG_LOG_SEQ。
CREATE SEQUENCE TRIG_LOG_SEQ START WITH 1 INCREMENT BY 1;CREATE OR REPLACE TRIGGER TRIG_AFTER_INSERT AFTER INSERT ON T_TRIGBEGININSERT INTO T_TRIG_LOG VALUES(TRIG_LOG_SEQ.NEXTVAL,'after insert',systimestamp); END;/--创建一个触发器,在往T_TRIG表中INSERT一条记录之前,往T_TRIG_LOG中写一条描述为"beforeinsert"记录。
CREATE OR REPLACE TRIGGER TRIG_BEFORE_INSERT BEFORE INSERT ON T_TRIGBEGININSERT INTO T_TRIG_LOG VALUES(TRIG_LOG_SEQ.NEXTVAL,'before insert',systimestamp); END;/--往T_TRIG表中INSERT一条记录。
实验十一 数据库 触发器
实验11 触发器一、实验目的1.掌握触发器的创建、修改、删除及其使用方法。
2.掌握触发器的功能。
二、实验内容(1)打开查询分析器,创建触发器。
例1:创建触发器trigger_Student, 如修改Student 表中某一学生的学号,则表SC中与该学生相关的学号自动别更新。
create trigger trigger_Studenton Student for updateasif update(Sno)begindeclare @newSno int,@oldSno intselect @newSno=Sno from insertedselect @oldSno=Sno from deletedupdate SC set Sno=@newSnowhere Sno=@oldSnoend激活触发器update Student set Sno='201015121' where Sno='200215121' select * from SC例2:创建一限制更新触发器trigger_SC,若修改表SC中一记录的学号,则要检查S中是否存在于该学生学号相同的记录,若有则不许修改,如没有则可修改create trigger trigger_SCon SC for updateasif update(Sno)begindeclare @newSno int,@oldSno int,@countSno intselect @oldSno=Sno from deletedselect @countSno=count(*) from Student where Sno=@oldSnoif @countSno<>0print '不允许修改'rollback transactionend激活触发器update SC set Sno='200215121' where Sno='201015121'例3:为SC表创建触发器trigger_Score,当插入一个记录或修改成绩时,确保此记录成绩在0-100之间。
数据库原理课程设计报告报告实验创建存储过程与触发器
存储过程与触发器实验日期和时间:2016 年 5 月13 日、星期五第节实验室:DJ2-信息管理实验室班级:学号:姓名:实验环境:1.硬件:笔记本电脑2.软件:SQL Server 2012实验原理:存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。
存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。
触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。
触发器经常用于加强数据的完整性约束和业务规则等。
实验任务:此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。
如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。
假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。
以下列出参考的库表情况:根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表)1.★图书现有库存表。
作用:记录图书的现有库存情况。
至少包括:书号、书名、作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库存总量、库存位置等。
2.★读者信息表。
作用:记录读者信息。
至少包括:读者编号、证件类型、证件号码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地址、联系电话等。
3.★借书记录表。
作用:记录借书情况,以及是否归还。
至少包括:借阅ID(主键,可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、管理员编号……等。
第十一次数据库实验-触发器的建立与使用
二、实验内容:
1、 使用 CREATE TRIGGER 语句定义触发器,ALTER TRIGGER 语句修改触发器, DROP TRIGGER 语句删除触发器。 2、 触发器分 AFTER/FOR 和 INSTEAD OF 两种类型:AFTER/FOR 类型的触发器是 在相应的触发语句(insert、delete、update)执行完后被触发的。如果触发语句对应 的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然 后才能触发对应的 AFTER/FOR 类型的触发器。INSTEAD OF 类型的触发器会在触发 语句(insert、delete、update)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句只能创建一个 INSTEAD OF 类 型的 触发器, 无法 为有外键约 束且指定为级联 删除或级联 修改的表创 建 DELETE 或 UPDATE 语句上的 INSTEAD OF 类型的触发器。
insert sales values (10002,'C0556','E0013',22700.00,'1996-11-10','I000000002')
数据库系统实验报告 触发器
实验4 触发器1、通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
Create or replace sequence bwnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Trigger tri_bwnum_idBefore Insert On borrowFor Each RowBeginSelect bwnum_id.Nextval Into :new.bwnumFrom DUAL;End;2、通过序列和触发器实现预约表中预约流水号字段的自动递增Create sequence pnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Trigger tri_pnum_idBefore Insert On preborrowFor Each RowBeginSelect pnum_id.Nextval Into :new.pnumFrom DUAL;End;3、修改实验三借书功能的存储过程。
该存储过程要求:(1)借书时输入借书证号,图书编号。
(即该函数有2个输入参数)(2)借书时,借书日期为系统时间。
*该存储过程主体部分只有insert into语句。
create or replace Procedure p_borrow(P_BNUM IN BORROW.BNUM%TYPE,P_RNUM IN BORROW.RNUM%TYPE)asbegininsertinto BORROW (BNUM,RNUM,BDATE)values(P_BNUM,P_RNUM,TO_CHAR(SYSDATE(),'YY/MM/DD'));commit;end;4、建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。
数据库,触发器实验报告
数据库,触发器实验报告数据库系统实验报告触发器实验4 触发器1、通过序列和触发器实现借阅表中借阅流水号字段的自动递增。
Create or replace sequence bwnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Triggertri_bwnum_idBefore Insert On borrowFor Each RowBeginSelect bwnum_id.NextvalInto :new.bwnumFrom DUAL;End;2、通过序列和触发器实现预约表中预约流水号字段的自动递增Create sequence pnum_idMinvalue 1Maxvalue 1.0E28Start with 1Increment by 1Cache 20;Create or Replace Triggertri_pnum_idBefore Insert On preborrowFor Each RowBeginSelect pnum_id.NextvalInto :new.pnumFrom DUAL;End;3、修改实验三借书功能的存储过程。
该存储过程要求:(1)借书时输入借书证号,图书编号。
(即该函数有2个输入参数)(2)借书时,借书日期为系统时间。
*该存储过程主体部分只有insert into语句。
create or replace Procedurep_borrow(P_BNUM IN BORROW.BNUM%TYPE,P_RNUM IN BORROW.RNUM%TYPE)asbegininsertinto BORROW (BNUM,RNUM,BDATE)values(P_BNUM,P_RNUM,TO_CHAR( SYSDATE(),'YY/MM/DD'));commit;end;4、建立与借书存储过程相对应的触发器,当借阅表中加入借阅信息时,该触发器触发,自动修改所借图书的是否借出改为‘是’。
数据库触发器的创建和使用总结
数据库触发器的创建和使用总结数据库触发器是一种在数据库管理系统中使用的特殊对象,它可以在特定的数据库操作发生时自动执行一系列的操作。
触发器可以用于实现数据的完整性约束、应用业务规则、监控数据库操作等功能。
创建数据库触发器需要以下几个步骤:1. 定义触发器的类型:触发器可以在 INSERT、UPDATE 或 DELETE 操作发生前或发生后执行操作。
根据需要选择合适的类型。
2. 指定触发器的事件:选择触发器对应的数据库表,并指定触发器所监控的事件,如 INSERT、UPDATE 或 DELETE。
3. 编写触发器的触发条件:定义触发器执行的条件,可以使用 SQL 表达式或逻辑判断语句来指定触发条件。
4. 编写触发器的操作:定义触发器触发后要执行的操作,可以是单个 SQL 语句或多个 SQL 语句的组合。
5. 创建触发器:使用数据库管理系统提供的 CREATE TRIGGER 语句来创建触发器。
使用数据库触发器可以实现以下功能:1. 强制实施数据完整性约束:通过在 INSERT、UPDATE 或 DELETE 操作前执行触发器,可以对数据进行验证和修正,确保数据的完整性和一致性。
2. 应用业务规则:触发器可以根据特定的业务规则执行相关操作,如在插入新记录时自动生成一个唯一标识符。
3. 监控和审计数据库操作:通过触发器,可以记录数据库操作的详细信息,包括操作时间、操作用户等,以便进行监控和审计。
4. 实现数据复制和同步:触发器可以用于实现数据的复制和同步,当一个表的数据发生变化时,触发器可以自动将变化应用到其他表。
然而,使用触发器也需要注意一些问题:1. 触发器的执行效率:触发器会在数据库操作发生时自动执行,如果触发器的操作较为复杂,可能会对数据库的性能产生影响。
2. 触发器的递归执行:触发器的执行可能会引起其他触发器的执行,如果触发器之间存在递归调用,可能会导致死循环。
3. 触发器的管理和维护:数据库中存在大量的触发器时,触发器的管理和维护可能会变得复杂,需要注意触发器的命名和组织结构。
数据库触发器的编写和应用实践
数据库触发器的编写和应用实践数据库触发器是一种在特定事件发生时自动执行的数据库对象。
它可以监视数据库的各种操作,如插入、更新、删除等,并在满足特定条件时执行相应的动作。
本文将介绍数据库触发器的编写和应用实践。
一、数据库触发器的编写1. 定义触发器类型:数据库触发器包括三种类型:BEFORE、AFTER和INSTEAD OF。
BEFORE触发器在触发事件之前执行,并且可以修改新值或阻止触发事件的执行。
AFTER触发器在触发事件之后执行,并且不能修改新值。
INSTEAD OF触发器是在触发事件之前执行,但可以阻止触发事件的执行,并自行处理相关操作。
2. 定义触发器事件:数据库触发器可以与特定的表、视图或数据库事件相关联。
可以为表的INSERT、UPDATE和DELETE操作编写相应的触发器,或者与特定的视图或数据库事件相关联。
3. 编写触发器逻辑:触发器逻辑是在触发事件发生时要执行的操作。
它可以是SQL语句,也可以是自定义的存储过程或函数。
可以根据需要在触发器中执行各种数据库操作,如插入、更新、删除等。
4. 定义触发器的触发条件:触发器可以通过定义触发条件来确定在何时执行。
触发条件可以使用SQL语句中的条件表达式来定义,并可以包含对新值和旧值的引用。
5. 定义触发器的生命周期:数据库触发器可以定义其生命周期,即触发器何时启动和何时停止。
可以在CREATE TRIGGER语句中使用ON关键字来指定触发器的启动和停止时间。
二、数据库触发器的应用实践1. 数据一致性维护:数据库触发器可用于维护数据的一致性。
例如,可以编写触发器来验证插入或更新操作中的数据完整性。
触发器可以检查输入数据的条件,并根据规则拒绝或修改数据,确保数据的一致性。
2. 日志记录和审计:触发器还可以用于记录和审计数据库操作。
可以编写触发器来在特定事件发生时插入数据到日志表中。
这样可以跟踪数据库操作的历史记录并进行审计。
3. 查询优化:触发器可以用于查询优化,通过预先计算和缓存计算结果来提高查询性能。
实验 11.1 创建触发器_数据库系统原理及应用(SQL Server 2012)_[共4页]
242④触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。
触发器只要满足触发条件即可执行,及时性很强,但其缺点是性能不够高。
4.触发器工作原理SQL Server在工作时为每个触发器在服务器的内存上建立两个特殊的表:Inserted和Deleted。
(1)Inserted表的功能若在某张表上创建触发器,触发条件为该表插入数据,则一旦对该表执行了插入(INSERT)操作,那么对该表插入的行都有一个相应的副本存放到Inserted表中,即Inserted表用来存储原表插入的内容。
(2)Deleted表的功能若在某张表上创建触发器,触发条件为该表删除数据,则一旦对该表执行了删除(DELETE)操作,则将删除的行存放至Deleted表中。
若在某张表上创建触发器触发条件为该表更新数据,则一旦对该表执行了更新(VPDATE)操作,则将更新前的数据存放至Deleted表中,更新后的数据存放至Inserted表。
Inserted表和Deleted 表只存在于触发器执行过程中。
5.创建触发器的SQL语句CREATE TRIGGER 触发器名称ON 表名 | 视图名[ WITH ENCRYPTION ] --加密触发器AFTER | INSTEAD OF INSERT [ ,UPDATE ] [ ,DELETE ]ASBEGIN<触发器要实现的T-SQL语句块>END6.修改触发器的SQL语句ALTER TRIGGER trigger_nameON(table | view)[ WITH ENCRYPTION ]{ { FOR | AFTER | INSTEAD OF { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] }[ NOT FOR REPLICATION ]AS7.删除触发器的SQL语句DROP TRIGGER 触发器名删除触发器所在的表时,SQL Server将自动删除与该表相关的触发器。
数据库触发器实验实训报告
一、实验背景随着信息技术的飞速发展,数据库技术在各行各业中的应用越来越广泛。
数据库触发器作为数据库管理系统的重要组成部分,具有强大的功能,能够帮助用户实现复杂的数据操作和业务逻辑。
为了提高学生对数据库触发器的理解与应用能力,我们开展了数据库触发器实验实训。
二、实验目的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:。
数据库实验十报告
实验十触发器1 实验目的与要求(1) 掌握触发器的创建和使用方法。
(2) 掌握游标和触发器的综合应用方法。
2 实验内容请完成下面实验内容:(1) 创建触发器,该触发器仅允许“dbo”用户可以删除Employee表内数据。
触发器创建:添加用户:图-1 测试结果(2) 创建触发器,当向订单明细表添加销售明细数据时,统计该订单销售金额。
要求:如果订单金额5000元及以上,则该订单中销售的所有商品按9折进行优惠处理(更新订单明细表中成交价格),同时还应更新订单总表中该订单的订单金额。
触发器创建:测试结果:OrderDetail表:OrderMaster表:图-2 测试结果(3) 创建触发器,要求当修改Employee表中员工的出生日期或雇佣日期时,必须保证出生日期在雇佣日期之前,且雇佣日期与出生日期之间必须间隔16周年及以上。
触发器创建:测试:图-3 测试结果(4) 当更新Customer表中的customerNo列的值的时候(一次只能更新一行),同时更新OrderMaster表中的customerNo列的值。
触发器创建:测试:测试结果:图-4 测试结果(5) 创建触发器,当业务员总销售业绩超过(含)10000元时,其薪水自动增加20%,当业务员总销售业绩超过(含)5000元低于10000时,其薪水自动增加10%,当业务员总销售业绩低于5000时,其薪水自动减少10%。
触发器创建:测试结果:测试之前的员工薪金。
更新OrderMaster之后,红色圈中的员工薪金已经发生了变化。
图-5 测试结果(6) 创建触发器,将入职3个月没有业绩的业务科人员做离职处理,其信息拷贝到离职表中(离职表需要自己事先建好,其表结构与员工表相同)。
离职员工人事表创建:触发器创建:测试:图-6 测试结果。
数据库触发器实验报告
数据库触发器实验报告一、引言随着信息技术的发展,数据处理已经成为了各种科学技术领域中至关重要的一环。
在数据处理系统中,数据库是必不可少的组成部分之一。
而数据库中的触发器就是实现数据库自动化的重要手段之一。
本文对数据库触发器的实验进行了详细的分析和总结,以期为大家提供一些有关数据库的实际应用经验和理论指导。
二、实验开展过程本次实验选择的是MySQL 5.0版本数据库,我们通过多个实验案例来了解和掌握触发器的实际应用。
1.定义触发器我们首先通过定义触发器的方法来了解触发器的基本概念和语法结构。
通过设置一些触发器的触发条件和执行程序,我们可以实现对数据库的自动化维护和更新。
2. 插入触发器然后我们通过插入触发器的实验案例来掌握数据库自动插入数据的具体实现方法。
这样,无须手动输入每一条数据,数据库就可以自动将新的数据插入到数据库中去。
这样做的好处在于可以减少人为错误的发生,并且提高了数据处理的效率。
3. 修改触发器接下来,我们又进行了修改触发器的实验案例。
通过设置一些修改触发器的触发条件和执行程序,可以在数据库中修改一些指定数据,或者将一些数据更新到数据库中。
4. 删除触发器最后,我们还进行了删除触发器的实验案例。
通过设置一些删除触发器的触发条件和执行程序,可以将数据库中的指定数据逐一删除掉,从而实现数据库的自动化维护和更新。
三、实验结果分析通过本次实验,我们加深了对数据库触发器的理解和掌握。
同时,我们也发现在实际应用中,触发器设计的精细度和实现的合理度对于数据库的使用效果有着十分重要的影响。
因此,我们应该在实际操作过程中,注重考虑实际应用场景和条件,来设计和优化触发器的应用方案。
四、总结本文主要介绍了数据库触发器的基本概念、使用步骤和实验案例。
触发器的应用范围非常广泛,在实际应用中有着极为重要的作用。
通过对本次实验的掌握和总结,我们可以更好地理解并掌握数据库触发器的应用方法和原理,为后续在实际工作中使用数据库打下了基础。
触发器——实验报告
触发器——实验报告本次实验主要针对的是数据库的触发器,触发器可以在数据库中对指定的事件进行响应,可以在事件发生前或发生后对相关的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表示删除的记录。
数据库实验三触发器的创建、修改及删除
昆明理工大学信息工程与自动化学院学生实验报告( 2010 —2011 学年第二学期)课程名称:数据库高级应用开课实验室:计算中心208 2011年 5月 17日年级、专业、班学号姓名成绩实验项目名称触发器的创建、修改及删除指导教师教师评语教师签名:年月日一、实验目的、要求目的:了解触发器的功能掌握触发器的使用方法要求:实现简单触发器的使用二、实验所用仪器、材料微型计算机一台SQL server 2008三、实验原理触发器与存储过程非常相似,触发器也是SQL 语句集,两者惟一的区别是触发器不能用EXECUTE 语句调用,而是在用户执行Transact-SQL 语句时自动触发(激活)执行。
触发器是一个在修改指定表中的数据时执行的存储过程。
经常通过创建触发器来强制实现不同表中的逻辑相关数据的引用完整性或者一致性。
由于用户不能绕过触发器,所以可以用它来强制实施复杂的业务规则,以此确保数据的完整性。
触发器不同于存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
当对某一表进行诸如UPDATE、INSERT、DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
四、实验过程及数据记录创建触发器BB(修改表S中的数据时SC中的数据也同时修改了)CREA TE TRIGGER BB ON S FOR UPDA TE ASIF UPDA TE(S#)BEGINUPDA TE SC SET SC.S#=A.S#FROMINSERTED A,DELETED BWHERE SC.S#=B.S#END查看表SC的数据SELECT*FROM SCWHERE S#='200510405101'修改表S中的数据UPDA TE SSET S#='000000000000'查看表SC中的数据(验证触发器的效果)SELECT*FROM SCWHERE S#='000000000000'CREA TE TRIGGER AA ON S FOR DELETE ASDELETE FROM SC WHERE S#IN(SELECT S#FROM S)删除触发器BBDROP TRIGGER BB五、实验总结触发器的作用触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。
数据库原理实验报告S11-数据库触发器的创建.
实验主要任务:导入学生成绩数据库,并建立相关表的关系,对数据库实施如下操作:一、利用SQL Server管理控制台创建DML触发器中的INSERT触发器的后(AFTER)触发器1. 利用SQL-SERVER管理控制台:创建一个INSERT触发器“TR_Course_Insert”,当在课程表中插入一条新记录时,触发该触发器,并给出“你插入了一条新的课程记录!”的提示信息。
2.创建了TR_Course_Insert触发器后,查看向课程表中插入数据时,此触发器所完成的功能。
二、使用Transact-SQL语句创建DML的后(FOR、AFTER)触发器(一)实现检查约束3. 创建一个AFTER触发器,要求实现以下功能:在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
create trigger TR_ScoreCheckon成绩for insert,updateasif(select成绩from inserted)between 0 and 100beginprint'你成功的对成绩表插入(更新)了一条记录'endelsebeginprint'(插入)更新的成绩数据错误'rollback transactionend在创建了TR_ScoreCheck触发器之后,在查询窗口中输入以下SQL语句验证:(独立完成:4.创建一个AFTER触发器,要求实现以下功能:在2003学生名单表上创建一个插入、更新类型的触发器TR_Sex_Check,当在性别字段中插入或修改性别后,触发该触发器,检查性别是否是‘男’或‘女’,并验证)set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER trigger [TR_Sex_Check]on [dbo].[学生名单]for insert,updateasif(select性别from inserted)in('男','女')beginprint'插入(更新)数据'endelsebeginprint'插入或更新的性别错误'rollback transactionend(二)实现层叠修改5.创建一个AFTER触发器,要求如下:在学生表上创建一个删除类型的触发器TR_Stu_Delete,当在学生表中删除某一条记录后,触发该触发器,在成绩表中删除与此学号对应的记录。
2021年数据库实验触发器实验报告
淮海工学院计算机工程学院试验汇报书课程名:《数据库原理及应用》题目: 存放过程和触发器班级: 软件132学号:姓名: 孙莹莹一.目与要求1.掌握存放过程创建方法;2.掌握存放过程实施、修改和删除等操作;3.掌握触发器创建方法;4.掌握触发器使用、修改和删除等相关内容二.试验内容基于前面建立factory数据库, 使用T-SQL语句完成以下各小题功效:1.创建一个为worker表添加职员统计存放过程Addworker;2.创建一个存放过程Delworker删除worker表中指定职员号统计。
3.显示存放过程Delworker;4.删除存放过程Addworker和Delworker.三.试验步骤1 .(1)建立存放过程USE factoryGOCREATE PROCEDURE Addworker@no int=NULL,@name char(10)=NULL,@sex char(2)=NULL,@birthday datetime=NULL,@na char(2)=NULL,@wtime datetime=NULL,@depno int=NULLASIF @no IS NULL OR @name IS NULL OR @sex IS NULL OR@birthday IS NULL OR @depno IS NULLBEGINPRINT '请重新输入该职员信息! 'PRINT '你必需提供职员号、姓名、性别、出生日期、部门号'RETURNENDBEGIN TRANSACTIONINSERT INTO workerVALUES(@no,@name,@sex,@birthday,@na,@wtime,@depno)IF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '职员'+@name+'信息成功添加到表worker中'(2)验证存放过程USE factoryGOAddworker 20,'陈立','女','55/03/08','否','75/10/10',4 GOSELECT 职员号,姓名,性别,党员否 FROM workerGO2.(1)建立存放程序USE factoryGOCREATE PROCEDURE Delworker@no int=NULLASIF @no IS NULLBEGINPRINT '必需输入职员号! 'RETURNENDBEGIN TRANSACTIONDELETE FROM worker WHERE 职员号=@noIF @@error<>0BEGINROLLBACK TRANRETURNENDCOMMIT TRANSACTIONPRINT '成功删除职员号为'+CAST(@no AS CHAR(2))+'职员统计' 实施下列语句, 可验证存放过程正确性:USE factoryGODelworker 20GOSELECT 职员号,姓名,性别,党员否 FROM workerGO3.USE factoryGOEXEC sp_helptext DelworkerGO4.USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Addworker' AND type ='P')DROP PROCEDURE AddworkerGOIF EXISTS (SELECT name FROM sysobjectsWHERE name = 'Delworker' AND type ='P')DROP PROCEDURE DelworkerGO5.建立触发器depart_update程序以下:USE factoryGOIF EXISTS (SELECT name FROM sysobjectsWHERE type='TR' AND name='depart_update')DROP TRIGGER depart_updateGOCREATE TRIGGER depart_update ON departAFTER UPDATEASDECLARE @olddepno int,@newdepno intSELECT @olddepno=部门号FROM deletedSELECT @newdepno=部门号FROM inserted UPDATE workerSET 部门号=@newdepnoWHERE 部门号=@olddepnoGO实施下列语句, 可验证存放过程正确性:USE factoryGOPRINT '将部门号改为'UPDATE departSET 部门号=105WHERE 部门号=101GOSELECT 职员号,姓名,部门号FROM workerGOPRINT '将部门号改为'UPDATE departSET 部门号=101WHERE 部门号=105GOSELECT 职员号,姓名,部门号FROM workerGO6.建立触发器worker_delete程序以下:USE factoryGOIF EXISTS(SELECT name FROM sysobjects WHERE type='TR'AND name='worker_delete')DROP TRIGGER worker_deleteGOCREATE TRIGGER worker_delete ON worker FOR DELETEASDECLARE @no intSELECT @no=职员号FROM deletedDELETE FROM salaryWHERE职员号=@noGO实施下列语句, 可验证存放过程正确性:USE factoryGOPRINT'删除前工资统计'SELECT*FROM salaryGODELETE FROM workerWHERE职员号=15GOPRINT'删除职员号为职员统计后工资统计'SELECT*FROM salaryGO7.删除触发器depart_update程序以下:USE factoryGODROP TRIGGER depart_updateGO8.删除触发器worker_delete程序以下:USE factoryGODROP TRIGGER worker_deleteGO四.测试数据与试验结果第1题图第2题图第3题图第5题图第6题图五.结果分析与试验体会CREATE PROCEDURE语句许可创建、编译并在MS-SQL Server上保留存放过程。
触发器的创建---实验报告7
运行结果如图所示:
2-2向课程信息表插入记录
insert into课程信息表(课程ID,课程名称,课程类别,学分,学时)
values('JB0001','马克思主义哲学原理','基础必修',2,32)
insert into课程信息表
values('JB0002','毛泽东思想概论','基础必修',2,32)
(教师ID char(8) primary key
check(教师ID like ('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
姓名varchar(16) not null,
性别char(8) check(性别in ('M','F')),
职称varchar(8) check(职称in('教授','副教授','讲师','助教')),
姓名varchar(8) not null,
性别char(8) check(性别in ('M','F')),
出生日期datetime check(出生日期>='1970'),
籍贯char(8),
专业char(8),
班级char(8))
运行结果如图所示:
1-2向学生档案插入记录
insert into学生档案(学号,姓名,性别,出生日期,籍贯,专业,班级)
where学号=(select学号from inserted)and课程ID = (select课程ID from inserted)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验11 数据库触发器的建立实验日期和时间:2014.11.28 实验室:软件工程室班级:12计科3 学号:20124122 姓名:张翔实验环境:1.硬件:内存4.00GB 处理器2.50Hz2.软件:Windows 7旗舰版Microsoft SQL Server 2005实验原理:1.理解触发器的概念、和一般存储过程的区别、触发器的优点和使用原则。
2.掌握触发器的创建、执行、查看、修改和删除方法。
一、触发器的概念:触发器是一种特殊类型的存储过程。
一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过当某个事件发生时自动被触发执行的。
触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。
当创建数据库对象或在数据表中插入记录、修改记录或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。
触发器和引起触发器执行的SQL语句被当作一次事务处理,如果这次事务未获得成功,SQL Server会自动返回该事务执行前的状态。
使用触发器有以下优点:▪触发器是自动的执行的,。
▪触发器可以通过数据库中的相关表进行层叠更改,如可以在“学生表”中的学号列上创建一个删除触发器,当删除“学生表”的记录时,自动级联删除“成绩表”中的个匹配行。
▪触发器可以强制限制。
这些限制比用CHECK约束所定义的更复杂,与CHECK约束不同的是,触发器可以引用其他表中的列。
触发器可以分为DML触发器和DDL触发器两种▪DDL触发器用于响应各种数据定义语言(DDL) 事件。
这些事件主要对应于Transact-SQL 中的CREATE、ALTER 和DROP 语句,以及执行类似DDL 操作的某些系统存储过程。
它们用于执行管理任务,并强制影响数据库的业务规则。
▪DML触发器是在用户使用数据操作语言(DML) 事件编辑数据时发生。
DML 事件是针对表或视图的INSERT、UPDATE 或DELETE 语句。
DML触发器有助于在表或视图中修改数据时强制业务规则,扩展数据完整性。
DML触发器又分为AFTER触发器和INSTEAD OF触发器两种:▪AFTER触发器:这种类型的触发器将在数据变动(INSERT、UPDA TE和DELETE 操作)完成以后才被触发。
可以对变动的数据进行检查,如果发现错误,将拒绝接受或回滚变动的数据。
AFTER触发器只能在表上定义。
在同一个数据表中可以创建多个AFTER触发器。
▪INSTEAD OF触发器:INSTEAD OF触发器将在数据变动以前被触发,并取代变动数据的操作,而去执行触发器定义的操作。
INSTEAD OF触发器可以在表或视图上定义。
每个INSERT、UPDATE和DELETE语句最多定义一个INSTEAD OF触发器。
二、创建触发器1. 使用SQL Server管理控制台创建DML触发器在SQL Server管理控制台中,展开指定的服务器和数据库,单击要创建触发器的数据表,右击其中的“触发器”文件夹。
从弹出的快捷菜单中选择“新建触发器”选项,会出现新建触发器模板窗口,在新建的触发器模板窗口中单击“查询”菜单中“指定模板参数的值”选项,会弹出“指定模板参数的值”对话框,可以在这里设置参数的具体值。
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 ]其中,各参数的说明如下:▪schema_name:DML触发器所属架构的名称。
▪trigger_name:触发器的名称。
▪table | view:对其执行DML触发器的表或视图。
▪WITH ENCRYPTION:对CREATE TRIGGER语句的文本进行加密处理。
▪EXECUTE AS:指定用于执行该触发器的安全上下文。
▪FOR | AFTER:AFTER指定触发器仅在触发SQL语句中指定的所有操作都已成功执行时才被触发。
不能对视图定义AFTER触发器。
▪INSTEAD OF:指定执行DML触发器而不是触发SQL语句。
▪{[DELETE] [,] [INSERT] [,] [UPDATE]}:指定数据修改语句。
必须至少指定一个选项。
▪sql_statement:触发条件和操作。
当创建一个触发器时必须指定以下几项内容:▪触发器的名称;▪在其上定义触发器的表;▪触发器将何时激发;▪执行触发操作的编程语句。
注意DML触发器时生成的两个幻表:▪DML触发器可以使用两个特殊的临时表,它们分别是inserted表和deleted表。
这两个表都存在于内存中。
它们在结构上类似于定义了触发器的表。
▪在inserted表中存储着被INSERT和UPDATE语句影响的新的数据行。
在执行INSERT或UPDATE语句时,新的数据行被添加到基本表中,同时这些数据行的备份被复制到inserted临时表中。
▪在deleted表中存储着被DELETE和UPDATE语句影响的旧数据行。
在执行DELETE 或UPDATE语句时,指定的数据行从基本表中删除,然后被转移到了deleted表中。
在基本表和deleted表中一般不会存在相同的数据行。
▪一个UPDATE操作实际上是由一个DELETE操作和一个INSERT操作组成的。
在执行UPDATE操作时,旧的数据行从基本表中转移到deleted表中,然后将新的数据行同时插入基本表和inserted表中。
实验主要任务:导入学生成绩数据库,并建立相关表的关系,对数据库实施如下操作:一、利用SQL Server管理控制台创建DML触发器中的INSERT触发器的后(AFTER)触发器1. 利用SQL-SERVER管理控制台:创建一个INSERT触发器“TR_Course_Insert”,当在课程表中插入一条新记录时,触发该触发器,并给出“你插入了一条新的课程记录!”的提示信息。
2.创建了TR_Course_Insert触发器后,查看向课程表中插入数据时,此触发器所完成的功能。
二、使用Transact-SQL语句创建DML的后(FOR、AFTER)触发器(一)实现检查约束3. 创建一个AFTER触发器,要求实现以下功能:在成绩表上创建一个插入、更新类型的触发器TR_ScoreCheck,当在成绩字段中插入或修改考试分数后,触发该触发器,检查分数是否在0-100之间。
create trigger TR_ScoreCheckon成绩for insert,updateasif(select成绩from inserted)between 0 and 100beginprint'你成功的对成绩表插入(更新)了一条记录'endelsebeginprint'(插入)更新的成绩数据错误'rollback transactionend在创建了TR_ScoreCheck触发器之后,在查询窗口中输入以下SQL语句验证:(独立完成:4.创建一个AFTER触发器,要求实现以下功能:在2003学生名单表上创建一个插入、更新类型的触发器TR_Sex_Check,当在性别字段中插入或修改性别后,触发该触发器,检查性别是否是‘男’或‘女’,并验证)set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER trigger [TR_Sex_Check]on [dbo].[学生名单]for insert,updateasif(select性别from inserted)in('男','女')beginprint'插入(更新)数据'endelsebeginprint'插入或更新的性别错误'rollback transactionend(二)实现层叠修改5.创建一个AFTER触发器,要求如下:在学生表上创建一个删除类型的触发器TR_Stu_Delete,当在学生表中删除某一条记录后,触发该触发器,在成绩表中删除与此学号对应的记录。
create trigger TR_Stu_Deleteon学生for deleteasbegindeletefrom成绩where学号=(select学号from deleted)end在创建了TR_Stu_Delete触发器之后,在查询窗口中输入以下SQL语句验证:(独立完成:6.创建一个AFTER触发器,要求实现以下功能在2003班级表上创建一个删除类型的触发器TR_Class_Delete,当在2003班级表中删除某一条记录后,触发该触发器,在2003学生名单中删除与此学号对应的记录。
并验证)set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER trigger [TR_Class_Delete]on [dbo].[班级]for deleteasbegindeletefrom学生名单where班级=(select班级from deleted)end三、使用Transact-SQL语句创建DML的前(INSTEAD OF)触发器7.创建一个INSTEAD OF触发器,要求实现以下功能:在课程表上创建一个删除类型的触发器TR_NotAllowDelete,当在课程表中删除记录时,触发该触发器,显示不允许删除表中数据的提示信息。
在创建了TR_Stu_Delete触发器之后,在查询窗口中输入以下SQL语句验证:四、查看和修改触发器(一)利用SQL Server管理控制平台查看8.使用SQL Server管理控制台查看TR_Course_Insert触发器并查看与该触发器有依赖关系的其他数据库对象(二)使用系统存储过程查看触发器可以使用系统存储过程sp_help、sp_helptext和sp_depends分别查看触发器的不同信息。
它们的具体用途和语法形式如下:sp_help:用于查看触发器的一般信息,如触发器的名称、属性、类型和创建时间。