文档详情

《数据库原理及应用教程-MySQL8.0》课件 第9章 游标、触发器和事件.ppt

发布:2025-04-14约1.05万字共46页下载文档
文本预览下载声明

9.2.2创建触发器【例9-17】触发器中调用存储过程。首先创建一个存储过程p1:USEbankcard;DELIMITER//CREATEPROCEDUREp1(anoCHAR(19),balfloat)BEGINDECLAREbalaFLOAT;SELECTbalanceINTObalaFROMaccountWHEREACCNO=ano;IFbalabalTHENSIGNALSQLSTATEERRORSETMESSAGE_TEXT=余额不足!;ENDIF;END//9.2.2创建触发器为account表创建一个触发器tr1;修改数据(比如转账或消费)时,触发触发器调用存储过程p1。USEteaching;CREATETRIGGERtr1BEFOREUPDATEONaccountFOREACHROWCALLp1(new.ACCNO,old.balance-new.balance);【例9-18】“4125428003351200002”账号消费20元,执行时触发例9-17的触发器。USEbankcard;UPDATEaccountSETBalance=Balance-20WHEREAccNO=4125428003351200002;9.2.2创建触发器【例9-19】用于实施监控的触发器。首先,在teaching数据库建立登记修改人账号的表change_user,表结构如下:9.2.2创建触发器创建触发器tr_change,用于登记修改数据者及修改时间等信息。USEteaching;CREATETRIGGERtr_changeAFTERUPDATEONCOURSEFOREACHROWINSERTINTOchange_userVALUES(NOW(),USER());触发该触发器:USEteaching;UPDATEcourseSETclasshour=5WHEREcno=C004;9.2.2创建触发器注意事项:(1)触发器不接受参数。(2)触发器中如果包含SELECT语句,该SELECT语句不能返回结果集。(3)?MySQL5.7以下的版本一个表上同一时间、同一事件的触发器只能有一个,所以最多可有6个触发器,但MySQL5.7及以上版本不再有这个限制。(4)在一个表上的?触发器越多,对在该表上的DML操作的性能影响就越大。(5)创建好的触发器要进行反复测试,以避免其产生意想不到的负面影响。9.2.4删除触发器(1)在可视化管理工具的菜单界面的“表设计器”中找到相应的触发器,鼠标右击,选择“删除触发器”。(2)使用SQL命令DROPTRIGGER删除指定的触发器DROPTRIGGER[database_name]trigger_name;【例9-20】删除student表上的del_stu触发器。USEteaching;DROPTRIGGERdel_stu;注:删除触发器所在的表时,MySQL将自动删除与该表相关的触发器。9.3事件从MySQL5.1开始新增了一个特色功能事件调度器(EventScheduler),简称事件。9.3.1事件简介事件是指定的时刻才被执行的过程式数据库对象,它可以作为定时任务调度器,取代部分原来只能用操作系统的计划任务才能执行的工作。MySQL的事件可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下是非常实用的,比如火车售票系统、股票交易系统、各种比赛的实时统计分析等等。9.3.1事件简介事件调度器是定时触发执行的,从这个角度上看也可以称作是“临时触发器”。但是它与触发器又有所区别,触发器只针对某个表产生的事件执行一些语句,而事件调度器则是在某一段(间隔)时间执行一些语句。一个事件可调用一次,也可周期性的启动,它是由一个特定的线程来管理的,也就是所谓的“事件调度器”。使用事件调度器之前,必须确保它处于开启状态。9.3.1事件简介(1)查看事件调度器查看事件调度器是否已开启,执行以下SQL语句:SHOWVARIABLESLIKEevent_scheduler;也可以直接查看系统变量:SELECT@@event_scheduler;“ON”,表示已开启;“OFF”,表示未开启。9.3.1事件简介(2)开启事件调度器如果事件调度器未开启,用以下S

显示全部
相似文档