欢迎来到天天文库
浏览记录
ID:40560242
大小:38.00 KB
页数:7页
时间:2019-08-04
《MySql 触发器实例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、MySql 触发器实例~~语法~~CREATETRIGGER<触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.{BEFORE
2、AFTER} --触发器有执行的时间设置:可以设置为事件发生前或后。{INSERT
3、UPDATE
4、DELETE} --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。ON<表名称> --触发器是属于某一个表的:当在这个表上执行插入、更新或删除操作的时候就导致触发器的激活.我们不能给同一张表的同一个事件安排两个触发器。FOREACHROW --触发器的执行
5、间隔:FOREACHROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样。--你必须拥有相当大的权限才能创建触发器(CREATETRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。~~实例~~Example1:创建表tab1DROPTABLEIFEXISTStab1;CREATETABLEtab1( tab1_idvarchar(11));创建表tab2DROPTABLEIFEXISTStab2;CREA
6、TETABLEtab2( tab2_idvarchar(11));创建触发器:t_afterinsert_on_tab1作用:增加tab1表记录后自动将记录增加到tab2表中DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_tab1AFTERINSERTONtab1FOREACHROWBEGIN ifnew.tab1_idisnotnullthen insertintotab2(tab2_id)values(new.tab1_id); endif;END;测试一下INSE
7、RTINTOtab1(tab1_id)values('0001');看看结果SELECT*FROMtab1;SELECT*FROMtab2;高级实例CREATETRIGGERt1beforeINSERTONdataFOREACHROWBEGINdeclaretodayMaxIdint;//申明变量declareseralvarchar(20);selectmax(intId)intotodayMaxIdfromeverydayintidwhereyear(addDate)=year(NOW())andmonth(addDate)=month(NOW())andday(addDate)=da
8、y(NOW());if(todayMaxIdisnull)thensettodayMaxId=0;//给变量赋值endif;settodayMaxId=todayMaxId+1;insertintoeverydayintid(addDate,intId)values(now(),todayMaxId);setseral=CAST(todayMaxIdaschar(20));while(length(seral)<4)dosetseral=concat(0,seral);endwhile;setNEW.serialId=concat('jd',year(NOW()),month(NOW())
9、,day(NOW()),seral);END;Example2:创建触发器:t_afterdelete_on_tab1作用:删除tab1表记录后自动将tab2表中对应的记录删去DROPTRIGGERIFEXISTSt_afterdelete_on_tab1;CREATETRIGGERt_afterdelete_on_tab1AFTERDELETEONtab1FOREACHROWBEGIN deletefromtab2wheretab2_id=old.tab1_id;END;测试一下DELETEFROMtab1WHEREtab1_id='0001';看看结果SELECT*FROMta
10、b1;SELECT*FROMtab2;postscript:查看触发器用SHOWTRIGGERS触发器是属于一个表的,当在这个表上执行insert,update,delete操作时,就会导致相应的触发器被激活;不能给同一个表的同一个操作创建两个不同的触发器。触发间隔:FOREACHROW子句通知MySQL触发器每隔一行执行一次动作,而不是对整下表执行一次。 在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列
此文档下载收益归作者所有