数据库原理-第五章.ppt

上传人:牧羊曲112 文档编号:5985480 上传时间:2023-09-11 格式:PPT 页数:25 大小:277.11KB
返回 下载 相关 举报
数据库原理-第五章.ppt_第1页
第1页 / 共25页
数据库原理-第五章.ppt_第2页
第2页 / 共25页
数据库原理-第五章.ppt_第3页
第3页 / 共25页
数据库原理-第五章.ppt_第4页
第4页 / 共25页
数据库原理-第五章.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数据库原理-第五章.ppt》由会员分享,可在线阅读,更多相关《数据库原理-第五章.ppt(25页珍藏版)》请在三一办公上搜索。

1、1,第五章 数据库完整性,实体完整性 参照完整性 用户自定义的完整性完整性约束命名子句触发器,5.6 触发器,定义触发器激活触发器删除触发器Sqlserver2005中的触发器,定义触发器触发器是什么?触发器是用户定义在关系表中的一类由事件驱动的特殊过程。表中数据的增、删、改操作是激活触发器的事件。触发器可以实施比foreign key约束、check约束更为复杂的检查和操作,具有更精细和更强大的数据控制能力。触发器的定义CREATE TRIGGER语法格式 CREATE TRIGGER ON FOR EACH WHEN,定义触发器触发器的定义语法详解创建者:表的拥有者触发器名:为触发器命名表

2、名:触发器的目标表的名字触发事件:INSERT、DELETE、UPDATE或它们的组合触发器的类型:行级触发器和语句级触发器触发条件:触发器被激活时,根据该条件判断是否执行触发动作条:是一个匿名过程块,或是对以创建存储过程的调用。如果是行级触发器,用户可以在过程体中使用NEW和OLD引用UPDATE/INSERT事件之后的新值和UPDATE/DELETE事件之前的旧值。如果是语句级触发器则不能在动作体中使用NEW或OLD进行引用。,定义触发器触发器的定义例18 定义一个BEFORE行级触发器,为教师表Teacher定义完整性规则“教授的工资不得低于4000元,如果低于4000元,自动改为400

3、0元”。CREATE TRIGGER Insert_Or_Update_Sal BEFORE INSERT OR UPDATE ON Teacher FOR EACH ROW AS BEGIN IF(new.Job=教授)AND(new.Sal 4000)THEN new.Sal:=4000;END IF;END;,例19定义AFTER行级触发器,当教师表Teacher的工资发生变化后就自动在工资变化表Sal_log中增加一条相应记录 首先建立工资变化表Sal_log CREATE TABLE Sal_log(Eno NUMERIC(4)references teacher(eno)Sal N

4、UMERIC(7,2),Username char(10),Date TIMESTAMP);CREATE TRIGGER Insert_Sal AFTER INSERT ON Teacher FOR EACH ROW AS BEGIN INSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);END;,例19续 CREATE TRIGGER Update_Sal AFTER UPDATE ON Teacher FOR EACH ROW AS BEGIN IF(new.Sal old.Sal)THEN I

5、NSERT INTO Sal_log VALUES(new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);END IF;END;,5.6 触发器,定义触发器激活触发器删除触发器Sqlserver2005中的触发器,激活触发器触发器的执行,是由触发事件激活的,并由数据库服务器自动执行。一个数据表上可能定义了多个触发器同一个表上的多个触发器激活时遵循如下的执行顺序:(1)执行该表上的BEFORE触发器;(2)激活触发器的SQL语句;(3)执行该表上的AFTER触发器。同一个表上的多个BEFORE(AFTER)触发器的执行顺序:遵循“谁先创建,谁先执行”的原

6、则按字母顺序,激活触发器例题例20执行修改某个教师工资的SQL语句,激活上述定义的触发器。UPDATE Teacher SET Sal=800 WHERE Ename=陈平;执行顺序是:执行触发器Insert_Or_Update_Sal执行SQL语句“UPDATE Teacher SET Sal=800 WHERE Ename=陈平;”执行触发器Insert_Sal;执行触发器Update_Sal,删除触发器删除触发器的SQL语法:DROP TRIGGER ON;触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除。例21 删除教师表Teacher上的触发器Insert_Sal

7、DROP TRIGGER Insert_Sal ON Teacher;,5.6 触发器,定义触发器激活触发器删除触发器Sqlserver2005中的触发器,Sqlserver2005中的触发器触发器是什么?触发器是用户定义在关系表中的一类由事件驱动的特殊过程。在执行某些特定的SQL语句(触发特定事件)时自动执行。表的创建,修改,删除是激发触发器的事件(DDL触发器)表中数据的增、删、改操作是激活触发器的事件(DML触发器)。触发器可以实施比foreign key约束、check约束更为复杂的检查和操作,具有更精细和更强大的数据控制能力。,Sqlserver2005中的触发器触发器的定义?在定义

8、触发器时应指定触发器的:名称目标表格触发事件类型(执行动作体的方式)动作体(过程块)触发器的定义语句Create Trigger On As BeginEND,Sqlserver2005中的触发器触发器的功能?完成更复杂的数据约束。检查所做的SQL是否允许。修改其它数据表里的数据 返回自定义的错误信息。触发器的分类Instead of 触发器触发器触发后,用触发器中定义的过程块取代原操作(激活触发器的事件)After 触发器原操作(激活触发器的事件)完成后执行触发器过程块中的内容。,Sqlserver2005中的触发器请看下面例题例1:为student表格定义一个触发器Stu1,完成以下功能:

9、每当向student表格中插入一次数据后,在控制台提示“student表格中有数据插入”。create trigger stu1on studentafter insert as beginprint student 表格中有数据插入;end,Sqlserver2005中的触发器请看下面例题例2:为student表格定义一个触发器Stu2,完成以下功能:不允许再向student表格中插入任何数据。create trigger stu2on studentinstead of insert as beginprint 不让插入数据啦;end,Sqlserver2005中的触发器请看下面例题例2:

10、第二种做法。create trigger stu2on studentafter insert as beginRollback Transaction;print 不让插入数据啦;end,Sqlserver2005中的触发器删除前两个例题定义的触发器,请看下面例题例3:为student表格定义一个触发器stu3,使student表格中只能插入男同学的数据。该怎么做?请先理解触发器的工作原理。,Sqlserver2005中的触发器触发器的工作原理激活触发器时触发器会仿照目标表建立两个临时表,分别为inserted表和deleted表。当触发器被激活时会根据不同情况向两个表中存放相应记录inse

11、rted表中存放新的记录。Deleted表中存放旧的记录。两个表的具体存放信息如下:,Sqlserver2005中的触发器触发器的工作原理(续)两个临时表在触发器被激活时创建,在触发器工作结束后消失。两个表都是只读的,只能查询其中的数据,但是不能更新。在触发器的动作体中可以查询两个临时表,触发器工作结束后则不能再查询,Sqlserver2005中的触发器根据以上分析,我们再来看下例3例3:为student表格定义一个触发器stu3,使student表格中只能插入男同学的数据。create trigger stu3on studentinstead of insert as beginif(se

12、lect Ssex from inserted)男)beginprint 只能插入男同学记录;endelsebegininsert into studentselect*from inserted;endend,删除之前建立的触发器,请看下面例题例4:为student表格定义一个触发器stu4,当发生主键冲突时提示错误并拒绝操作。create trigger stu4on studentinstead of insert,updateas beginif(select count(*)from(select Sno from insertedwhere sno in(select sno fr

13、om student)X)0)beginprint 存在主键冲突;endelsebegininsert into studentselect*from inserted;endend,请自行思考下面两个例题该如何完成例5:为student表格定义一个触发器stu5,完成下面功能:student表中年龄的取值范围为大于16小于26,当对student表进行插入或更新操作时,如果年龄大于等于26,则自动变为25;当年龄小于等于16时自动变为17。例6:仿照student表新建一个日志表student_log,每当对student表中数据进行更新或删除操作时,将被删除和更新前的记录保存到student_log中。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号