网站大量收购独家精品文档,联系QQ:2885784924

第七章 视图和触发器.pptx

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

;学习目标;触发器是一种与表操作(INSERT、UPDATE、DELETE)有关的数据库对象。触发器定义了一系列操作,这一系列操作称为触发程序。当触发器所在表上出现INSERT、UPDATE以及DETETE操作时,将激活触发器,即表的操作事件触发表上的触发程序的执行。

触发器基于一个表创建,但是可以针对多个表进行操作,所以触发器可以用来对表实施复杂的完整性约束。

;触发器具有以下优点:

(1)触发器自动执行。当对表进行INSERT、UPDATE以及DETETE操作,试图修改表中的数据时,相应操作的触发器立即自动执行。

(2)触发器可以通过数据库中相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理。

(3)触发器可以实现用CHECK约束实现不了的复杂约束。与CHECK约束相比,触发器可以引用其他表中的列。

(4)触发器可以维护冗余数据,实现外键级联选项等。

;CREATETRIGGER语句语法格式如下:

CREATETRIGGER触发器名

AFTER/BEFOREINSERT/UPDATE/DELETE

ON表名

FOREACHROW

BEGIN

SQL语句;#触发程序

END;

;需要说明的是:

(1)触发器是数据库对象,因此创建触发器时,需要指定该触发器属于哪一个数据库。

(2)触发器是在表是创建的。这个表必须是基表,不能是临时表,也不能是视图。

;(3)MySQL的触发事件有三种:INSERT、UPDATE及DELETE。

INSERT:将新记录插入表时激活触发程序。

UPDATE:更改表中的记录时激活触发程序。

DELETE:从表中删除记录叶激活触发程序。

(4)触发器的触发时间有两种:BEFORE和AFTER。

BEFORE表示在触发事件发生之前执行触发程序,AFTER表示在触发事件发生之后执行触发程序。;(5)FOREACHROW表示行级触发器。

目前,MySQL仅支持行级触发器,不支持语句级别的触发器。FOREACHROW表示INSERT、UPDATE及DELETE操作影响的每一条记录都会执行一次触发程序。

(6)触发程序中的SELECT语句不能产生结果集。

;(7)触发程序中可以使用old关键字与new关键字。

①当向表中插入新记录时,在触发程序中可以使用new关键字表示新记录。当需要访问新记录中的某个字段时,可以使用“new.字段名”进行访问。

②当从表中删除某条旧记录???,在触发程序中可以使用old关键字表示旧记录。当需要访问旧记录中的某个字段时,可以使用“old.字段名”进行访问。;③当修改表中的某条记录时,在触发程序中可以使用new关键字表示修改后的记录。使用old关键字表示修改前的记录。当需要访问修改后的记录中的某个字段时,可以使用“new.字段名”进行访问。当需要访问旧记录中的某个字段时,可以使用“old.字段名”进行访问。

④old记录是只读的,在触发程序中只能引用它,但不能更改它。在BEFORE触发程序中,可使用“SETnew.字段名=值”更改new记录的值。但在AFTER触发程序中,不能使用“SETnew.字段名=值”更改new记录的值。

⑤对于INSERT操作,只有new是合法的。对于DELETE操作,只有old是合法的。对于UPDATE操作,new和old都是合法的。;一、使用触发器实现检查约束

使用触发器实现检查约束,在向elective表插入记录时,score字段的值或者为空,或者是在0~100之间。如果score字段的值不满足要求,则将score的值改成在指定范围内。

;对应的SQL语句如下:

DELIMITER//

CREATETRIGGERtr_elective_insertBEFOREINSERTONelectiveFOREACHROW

BEGIN

IF(new.scoreISNOTNULLnew.score0)

THEN

SETnew.score=0;

ELSEIF(new.scoreISNOTNULLnew.score100)

THEN

SETnew.score=100;

ENDIF;

END;//

DELIMITER;;使用触发器实现检查约束,在对elective表修改记录时,修改的记录score字段的值或者为空,或者是在0~100之间。如果score字段的值不满足要求,则记录不能修改。

;二、使用触发器维护冗余数据

使用触发器实现:当一位老师退休或调离时,将该

您可能关注的文档

文档评论(0)

方世玉 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6101050130000123

1亿VIP精品文档

相关文档