MysqL的触发器(trigger)和存储过程一样,都是嵌入到MysqL中的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句调用,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MysqL自动调用。比如对student表进行操作(INSERT、DELETE或UPDATE
查询其他表,而且可以包含复杂的sql语句。它们主要用于满足复杂的业务规则或要求。可以创建只有一条语句的触发器,不过一般都是有多个执行语句的触发器用得比较多,即使单条语句的触发器,也可以使用多条语句的触发器的写法来写,看下有多个执行语句的触发器的基本写法:
名称,用户自行指定
包括INSERT、UPDATE和DELETE
(
t_studentAge <span style="color: #0000ff;">int<span style="color: #000000;">
); <span style="color: #0000ff;">create <span style="color: #0000ff;">table<span style="color: #000000;"> triggerstudentPhone
(
t_studentPhone <span style="color: #0000ff;">VARCHAR(<span style="color: #800000; font-weight: bold;">15<span style="color: #000000;">)
);
显示,在向student表插入数据的同时,triggerstudentname、triggerstudentAge和triggerstudentPhone三张表里面的数据都发生了裱花,INSERT动作触发了触发器。
数据库中已存在的触发器的定义、状态和语法信息等。可以通过命令来查看已经创建的触发器,有两种方式可以查看触发器,一一讲解。
截取完整,解释一下主要部分的含义:
名称,这里有两个触发器分别是tri_student和trigger_student
后执行的语句
2、在triggers表中查看触发器信息
数据库中的triggers表中查找,通过SELECT命令查看,基本语法为:
效果
删除触发器
schema_name表示数据库名称,是可选的,如果省略了schema_name,将从当前数据库中删除触发器,trigger_name是要删除的触发器的名称,比如:
触发器tri_student删除成功
对于相同的表,相同的事件只能创建一个触发器。
MysqL将会报错,此时,只可以在表student上创建AFTER INSERT或者BEFORE UPDATE类型的触发器。灵活地运用触发器将为操作省去很多麻烦。