mysql学习记录:触发器

触发器:对某个表进行某种操作时,激活触发器,从而执行触发器包含的操作(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_***_***格式。


你可能感兴趣的:(mysql学习)