数据库——(15)触发器

触发器:trigger,事先为某张表绑定好一段代码,当表中的某些内容发生改变的时候(增和改)系统会自动触发代码、执行。
触发器要素:事件类型,触发时间,触发对象

事件类型:增删改:insert,delete,update
触发时间:前后:before,after
触发对象:表中的每一条纪录(行)

一张表中只能拥有一种触发时间的一种类型的触发器,最多一张表能有6个触发器。

创建触发器
在MySQL高级结构中,没有大括号,都是用对应的字符符号代替。
基本语法:

–临时修改语句结束符
delimiter 自定义符号:后续代码只有碰到自定义符号才算结束
create trigger 触发器名字 触发时间 事件类型 on 表名 for each row
begin –代表左大括号:开始
触发器内容:每行内容都必须使用语句结束符分号
end –代表右大括号:结束
自定义符号 –语句结束符
delimiter; –将自定义符号修正

delimiter $$
create trigger after_order after insert on my_order for each row
begin
update my_goods set inv = inv-1 where id = 2;
end
$$
delimiter ;

查看触发器
查看所有触发器或者模糊匹配
show triggers;
查看触发器创建语句
show create trigger 触发器名字;
所有触发器存在一张表中:information_schema.triggers

select * from information_schema.TRIGGERS;

使用触发器
触发器不需要手动调用,当某种情况发生时会自动触发。

修改触发器&删除触发器
触发器不能修改,只能先删除后新增
drop trigger 触发器名字;

drop trigger after_order;

触发器纪录
不管触发器是否触发了,只要当某种操作准备执行,系统就会将当前要操作的纪录的当前状态和即将执行之后的新的状态分别保留下来,共触发器使用。其中,要操作的当前状态保存到old中,操作之后的可能状态保存在new中。old、new都在触发器表中。
old代表旧纪录,new代表新纪录:删除的时候没有new,插入的时候没有old。
使用方式:old.字段名/new.字段名(new代表的是假设发生之后的结果)

delimiter $$
create trigger after_order after insert on my_order for each row
begin
update my_goods set inv = inv-new.g_number where id = new.g_id;
end
$$
delimiter ;

猜你喜欢

转载自blog.csdn.net/pianpiannia/article/details/76144952