MySQL触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATA和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会激发触发器执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,将激活该对象。
创建触发器
触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。
创建只有一个执行语句的触发器
创建语法如下:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt;
其中:
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,用before和after替换;
trigger_event:标识触发事件,用INSERT、UPDATA和DELETE替换;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体。
示例如下:
首先创建一个account表,表中有两个字段,分别为:acct_num字段(定义为int类型)、amount字段(定义成浮点类型);其次创建一个名为ins_sum的触发器,触发的条件是向数据表account插入数据之前,对新插入的amount字段值进行求和计算。
创建有多个执行语句的触发器
创建语法如下:
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt;
其中:
trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,用before和after替换;
trigger_event:标识触发事件,用INSERT、UPDATA和DELETE替换;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,触发程序可以使用begin和end作为开始和结束,中间包含多条语句。
示例如下:
1.创建几个示例表
2.创建有多个执行语句的触发器
3.给表1和表3插入初始值
4.向表1插入数据
5.查看结果
可以看到,向表test1中插入数据的时候,test2、test3、test4都发生了变化;向test2中插入了test1中的值,删除了test3中相同的内容,同时更新了test4中的b4,即与插入的值相同的个数。
查看触发器
使用SHOW TRIGGERS
在triggers表中查看
删除触发器