电工与电子技术电子商务电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章ppt_第1页
电工与电子技术电子商务电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章ppt_第2页
电工与电子技术电子商务电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章ppt_第3页
电工与电子技术电子商务电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章ppt_第4页
电工与电子技术电子商务电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子课件数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)第12章第12章 MySQL触发器与事件调度器数据库原理及应用教程(基于Linux的MySQL和NoSQL应用)CONTENTS触发器1事件2小结3触发器112.1.1 概念触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。 有以下的作用:审计安全性实现复杂的数据完整性规则实现复杂的非标准的数据库相关完整性规则12.1.2 创建使用触发器触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。在MySQL中,创建触发器的基本形

2、式如下:create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt bl_name必须引用永久性表。不能将触发程序与temporary表或视图关联起来。trigger_time是触发程序的动作时间。它可以是before或after,以指明触发程序是在激活它的语句之前或之后触发。 12.1.2 创建使用触发器trigger_event指明了激活触发程序的语句的类型。trigger_event可以是下述值之一:(1)insert:将新行插入表时激活触发程序,例如,通过ins

3、ert、load data和replace语句。(2)update:更改某一行时激活触发程序,例如,通过update语句。(3)delete:从表中删除某一行时激活触发程序,例如,通过delete和replace语句。特别提醒,trigger_event与以表操作方式激活触发程序的sql语句并不很类似,这点很重要。对于具有相同触发程序动作时间和事件的给定表,不能有两个触发程序。12.1.2 创建使用触发器【例12-1】创建一个表tb,其中只有一列a。在表上创建一个触发器,每次插入操作时,将用户变量count的值加一12.1.2 创建使用触发器向tb中插入一行数据: INSERT INTO tb

4、 VALUES(11); SELECT count; 12.1.2 创建使用触发器再向tb中插入一行数据: INSERT INTO tb VALUES(21); SELECT count;12.1.2 创建使用触发器触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL触发程序不能使用以显式或隐式方式开始或结束事务的语句,如START TRANSACTION、COMMIT或ROLLBACK。使用OLD和NEW关键字,能够访问受触发程序影响的行中的列(OLD和NEW不区分大小写)。在INSERT触发程序中,仅能使用NEW.col_name,没有旧行。在DELETE触发

5、程序中,仅能使用OLD.col_name,没有新行。在UPDATE触发程序中,可以使用OLD.col_name来引用更新前的某一行的列,也能使用NEW.col_name来引用更新后的行中的列。用OLD命名的列是只读的。你可以引用它,但不能更改它。对于用NEW命名的列,如果具有SELECT权限,可引用它。在BEFORE触发程序中,如果你具有UPDATE权限,可使用“SET NEW.col_name = value”更改它的值。这意味着,你可以使用触发程序来更改将要插入到新行中的值,或用于更新行的值。在BEFORE触发程序中,AUTO_INCREMENT列的NEW值为0,不是实际插入新记录时将自动

6、生成的序列号。通过使用BEGIN .END结构,能够定义执行多条语句的触发程序。12.1.2 创建使用触发器【例12-2】创建一个由delete触发多个执行语句的触发器tb_delete,每次删除记录时,都把删除的记录的a字段的值赋值给用户变量old_value。count记录删除的个数。12.1.2 创建使用触发器用delete删除所有数据a=21后,查看old_value 和count如下:12.1.2 创建使用触发器【例12-3】定义了一个update触发程序,用于检查更新每一行时将使用的新值,并更改值,使之位于0100的范围内。它必须是before触发程序,这是因为,需要在将值用于更新

7、行之前对其进行检查:12.1.2 创建使用触发器当我们把数据都更新为102后查看数据,应该都是100,如下: 12.1.3 查看触发器可以通过执行以下命令执行命令查看触发器的状态、语法等信息show triggers 另一种方法是查询系统表information_schema.triggers表,这个方式可以查询指定触发器的指定信息,操作起来明显方便得多。12.1.3 查看触发器【例12-4】查询名称为tb1_insert的触发器12.1.4 删除触发器在MySQL中,删除触发器的基本形式如下:drop trigger schema_name.trigger_name触发程序 数据库(sche

8、ma_name)是可选的。如果省略了schema,将从当前数据库中删除触发程序。【例12-5】删除触发器tb1_insert. 12.1.4 删除触发器【例12-4】查询名称为tb1_insert的触发器12.1.5 对触发器的进一步说明下面是使用触发器的一些限制:触发器不能调用将数据返回客户端的存储过程,也不能使用采用call语句的动态sql(允许存储过程通过参数将数据返回触发器)。触发器不能使用以显式或隐式方式开始或结束事务的语句,如start transaction、commit或rollback。 需要注意以下两点: 1.MySQL触发器针对行来操作,因此当处理大数据集的时候可能效率很

9、低。2.触发器不能保证原子性,例如在myisam中,当一个更新触发器在更新一个表后,触发对另外一个表的更新,若触发器失败,不会回滚第一个表的更新。innodb中的触发器和操作则是在一个事务中完成,是原子操作。事件212.2.1 事件概念自MySQL5.1.0起,增加了一个非常有特色的功能事件调度器(event scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。MySQL的44-事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:linux下的cron或windows下的任务计划)只能精确到每分

10、钟执行一次。事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(triggers)是基于某个表所产生的事件触发的,区别也就在这里。12.2.2 创建事件在MySQL中,创建事件的基本形式如下:create event event_name on schedule schedule on completion not preserve enable | disable | disable on slave comment comment do event_body; schedule: at timestamp i

11、nterval: quantity 12.2.2 创建事件【例12-6】创建一个立即启动的事件,创建后查看学生信息如下:12.2.2 创建事件注意,在使用时间调度器这个功能之前必须确保event_scheduler已开启,可执行SET global event_scheduler = 1; 或者可以在配置my.ini文件 中加上event_scheduler = 1或set global event_scheduler = on;来开启,也可以直接在启动命令加上“event_scheduler=1”。12.2.2 创建事件【例12-7】创建一个30秒后启动的事件, 创建后查看学生信息如下:12

12、.2.2 创建事件30秒后再查询SELECT * FROM student WHERE sno=1414855329;12.2.3 修改事件在MySQL中,修改事件的基本形式如下:alter event event_name on schedule schedule rename to new_event_name on completion not preserve comment comment enable | disable do sql_statement 1)临时关闭事件alter event event_name disable;2)开启事件alter event event_name enable; 12.2.3 修改事件【例12-8】将事件direct的名字改成firstdirect。12.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论