触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用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、UPDATE、DELETE |
tbl_name | 建立触发器的表名 |
trigger_stmt | 触发器执行语句 |
例:
CREATE TABLE account(acc_num INT,amount DECIMAL(10,2));
CREATE TRIGGER ins_sum BEFORE INSERT ON account
FOR EACH ROW SET @sum=@sum+NEW.amount;
创建有多个执行语句的触发器
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW
BEGIN
语句执行列表
END
参数 | 含义 |
trigger_name | 表示触发器名称,用户自行指定 |
trigger_time | 触发时机,可以指定为before或after |
trigger_event | 表示触发事件,包括INSERT、UPDATE、DELETE |
tbl_name | 建立触发器的表名 |
触发器程序可以使用BEGIN和END作为开始和结束,中间包含多条语句 |
查看触发器
SHOW TRIGGERS查看
mysql> SHOW TRIGGERS;
SHOW TRIGGERS
语句查看当前创建的所有触发器信息,在触发器较少的情况下,使用该语句会很方便。如果要查看特定触发器信息,可以直接从information_schema
数据库中的表triggers
中查找。
在triggers表中查看
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE condition;
删除触发器
DROP TRIGGER[schema_name.] trigger_name