



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、触发器 P191一、触发器概述1是一种特殊的存储过程。2不能被显式调用,只能由一些特定的操作(命令)引发(激活),这些命令是:INSERT、DELETE、UPDATE、CREATE、ALTER、DROP、GRANT、DENY、REVOKE等。3每个触发器由三部分组成触发器名称:命名规则与变量名、存储过程名相同;激活该触发器的操作(命令动词)。一个存储过程。4使用触发器可强制实现数据的一致性和完整性。二、触发器的分类(按引发命令分类) 及其工作原理1DML触发器(表级)(1)触发器必须依附于某一个表(触发器必须被包含在某一个表中)。(2)激活该触发器的操作:可以是INSERT、DELETE、UP
2、DATE之一。(3)当上述操作发生在包含触发器的表上时,触发器中的过程被自动执行。(4)支持两种类型的触发器:AFTER可以为同一表的同一操作定义多个该类型的触发器,并可定义执行顺序;INSTEAD OF同一表的同一操作只能定义一个该类型的触发器。(5)工作原理 P193临时逻辑表INSERTED和DELETED。2DDL触发器(数据库级和服务器级)(1)触发器必须依附于某一个数据库(触发器必须被包含在某一个数据库中)。(2)激活该触发器的操作:可以是CREATE、ALTER、DROP、GRANT、DENY、REVOKE等之一。(3)当上述操作发生在包含触发器的数据库上时,触发器中的过程被自动
3、执行。(4)只有AFTER型触发器。三、创建DML触发器 P194用命令CREATE TRIGGER创建例:1 CREATE TRIGGER 增加学生学分 ON 成绩 /只能增加一条记录FOR INSERTASDECLARE XH CHAR(6),KCH CHAR(8),FS DECIMAL(4,1)SELECT XH=学号,KCH=课程编号,FS=分数 FROM INSERTEDIF FS>=60 UPDATE 学生 SET 已修学分=已修学分+(SELECT 学分 FROM 课程 WHERE 课程编号=KCH) WHERE 学号=XH2CREATE TRIGGER 减少学生学分 ON
4、 成绩FOR DELETEASUPDATE 学生 SET 已修学分=已修学分-(SELECT SUM(学分) FROM 课程WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETEDWHERE 学生.学号=DELETED.学号 AND 分数>=60) WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETEDWHERE 学生.学号=DELETED.学号 AND 分数>=60)3.CREATE TRIGGER 修改学生学分 ON 成绩FOR UPDATEASUPDATE 学生 SET 已修学分=已修学分-(SELE
5、CT SUM(学分) FROM 课程WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM DELETEDWHERE 学生.学号=DELETED.学号 AND 分数>=60)WHERE EXISTS(SELECT DISTINCT 课程编号 FROM DELETEDWHERE 学生.学号=DELETED.学号 AND 分数>=60)UPDATE 学生 SET 已修学分=已修学分+(SELECT SUM(学分) FROM 课程WHERE 课程编号 IN(SELECT DISTINCT 课程编号 FROM INSERTEDWHERE 学生.学号=INSERTED
6、.学号 AND 分数>=60)WHERE EXISTS(SELECT DISTINCT 课程编号 FROM INSERTEDWHERE 学生.学号=INSERTED.学号 AND 分数>=60)4.“修改学生学分”也可改为:CREATE TRIGGER 修改学生学分 ON 成绩FOR UPDATEASUPDATE 学生 SET 已修学分=(SELECT SUM(学分) FROM 课程WHERE 课程编号 IN(SELECT 课程编号 FROM 成绩WHERE 学生.学号=成绩.学号 AND 分数>=60)然后可执行下列命令,并检验执行结果。-INSERT INTO 成绩 VA
7、LUES('200202','L2020308',83)-INSERT INTO 成绩 VALUES('200202','L2030501',80)-INSERT INTO 成绩 VALUES('200202','L2030506',75)-DELETE FROM 成绩 WHERE 学号='200202' AND LEFT(课程编号,1)='L'-UPDATE 成绩 SET 分数=80 WHERE 学号='200202' AND LEFT(课程编号,1
8、)='L'四、创建DDL触发器 P198例:1. P1992. CREATE TRIGGER 禁删数据库ON ALL SERVERFOR DROP_DATABASEASPRINT '请不要删除数据库!'ROLLBACK TRANSACTIONDROP DATABASE 订货管理五、嵌套触发器和递归触发器 P199, P200六、管理触发器 P2011查看2修改3禁用4删除-根据成绩表计算每个学生的已修学分update 学生set 已修学分=(select sum(学分) from 课程where 课程编号in(select 课程编号from 成绩where 学生
9、.学号=成绩.学号 and 分数>=60)-修改插入触发器,使得向成绩表中插入多条记录,也能成功执行CREATE TRIGGER 插入学生学分ON 成绩FOR insertASUPDATE 学生SET 已修学分=已修学分+(SELECT SUM(学分) FROM 课程WHERE 课程编号IN(SELECT DISTINCT 课程编号FROM insertedWHERE 学生.学号=inserted.学号AND 分数>=60) WHERE EXISTS(SELECT DISTINCT 课程编号FROM insertedWHERE 学生.学号=inserted.学号AND 分数>
10、=60)select * from 成绩select 学号,已修学分from 学生INSERT INTO 成绩VALUES('200202','L2020308',83)INSERT INTO 成绩VALUES('200202','L2030501',80)INSERT INTO 成绩VALUES('200202','L2030506',75)INSERT INTO 成绩VALUES('200201','L2020308',83)INSERT INTO 成绩VALUES('200201','L2030501',80)INSERT INTO 成绩VALUES('200201','L2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 预防感冒安全课件
- 仪器管理标识培训
- 科室职业健康培训
- 音乐课件软件小学生
- 水肌酸产品项目建设管理方案(参考模板)
- 电网侧独立储能示范项目环境影响报告书(范文模板)
- 2025年脲醛塑料项目合作计划书
- xx片区城乡供水一体化项目风险管理方案(范文模板)
- 2025年真空电子器件及零件项目建议书
- 2025年抗溃疡病药项目建议书
- 国家开放大学《社会调查方法》期末考试题库
- 公共体育场建设项目可行性研究报告
- 企业宣传视频拍摄制作方案
- 贷款车电子合同模板
- 飞利浦CX50-说明书
- 四年级上册语文全册重点知识
- 火龙罐综合灸技术
- 体育训练馆维修改造工程钢结构网架屋面施工组织设计
- 广州市岁以下婴幼儿照护服务工作管理业务培训考试试题附有答案
- 电化学储能黑启动技术导则
- 《微电影创作》课程标准(含课程思政)
评论
0/150
提交评论