触发器:对某个表进行某种操作时,激活触发器,从而执行触发器包含的操作(delete、insert、update)。
1.创建触发器
create trigger trigger_name before|after trigger_event on table_name for each row trigger_stmt
例如,当我对表t_student进行任何插入(insert)操作后,激活触发器tri_add_teacher_number,执行触发器包含的操作update t_teacher set number=number+1:
1)创建包含一条执行语句的触发器
CCREATE TRIGGER tri_add_teacher_number AFTER INSERT
ON t_student FOR EACH ROW
UPDATE
t_teacher
SET
number = number + 1;
执行:INSERT INTO t_student VALUES('小埋','女','德国骨科');
然后查看表t_teacher你会发现表中number字段数字都增加了1;
删除触发器:drop trigger tri_add_teacher_number;
2)创建包含多条执行语句的触发器
DELIMITER ##
CREATE TRIGGER t_many_update_number AFTER INSERT ON t_student FOR EACH ROW
BEGIN
UPDATE t_teacher SET number=number+1;
UPDATE t_teacher SET number=number-1;
END
##
DELIMITER ;
执行:INSERT INTO t_student VALUES('汪星人','男','喵星人麾下大将军,经常‘汪’的一声哭了出来!');
结果:表中number字段值不变。
解释:DELIMITER 设置结束符号,mysql默认的结束符号是“;”,因为会和语句中的“;”冲突,所以这里我们先将默认结束符号设置成“##”,最后别忘了将结束符号改回“;”
2.查看触发器
查看所有触发器:show triggers;
如果需要查看指定触发器内容:
1)use information_schema;(选择mysql自带的information_schema数据库)
2)SELECT * FROM TRIGGERS WHERE TRIGGER_NAME='t_many_update_number';(从表triggers中选择trigger_name=‘我们需要找的触发器的名字’)
3.删除触发器
use sqltest;
DROP TRIGGER t_many_update_number;
Ps:一般触发器名字以tri_***_***格式,我上面创建的那个触发器没注意名字格式,导致我删除触发器的时候还浪费了些时间找这个名字。因为一般表以t_***_***_***;,视图一般以v_***_***格式。