触发器(trigger):触发器可被视为预编译并存储在数据库中的小程序。在相应表上执行update、delete或insert之类的DML语句时,将自动执行触发器。这些DML命令还可以由外部客户端应用程序发出。触发器可以在启动它的语句之前或之后执行。
触发器包含:事件类型,触发时间,触发对象
事件类型:增删改,三种类型insert,delete和update
触发时间:前后:before和after
触发对象:表中的每一条记录(行)
注意:一张表中只能拥有一种触发时间的一种类型的触发器,最多一张表能有6个触发器
一、创建触发器
在MySQL高级结构中;没有大括号,都是用对应的字符符号代替
触发器的基本语法:
delimiter 自定义符号 -- 临时修改语句结束符
create trigger 触发器名字 触发器时间 事件类型 on 表名 for each row
begin
-- 里面就是触发器的内容;每行内容都必须使用语句结束符分号;
end 自定义符号
delimiter ; -- 将结束符修改过来
例如:在商品表和订单表中,每当订单表增加,商品表对应的商品的数量就要减少;
创建商品表(goods)和订单表(orders)
create table goods( id int primary key auto_increment, gname varchar(55), gount int not null ); create table orders( id int primary key auto_increment, oname varchar(55) not null ); insert into goods values(111,'小米手机',10),(null,'华为手机',10);
创建触发器
delimiter // create trigger my_good_order after insert on orders for each ROW BEGIN update goods set gount=gount-1 where id =111; end // delimiter ;
向orders表中增加记录,可看到goods表中的数量在减少
select * from goods; insert into orders values(null,'小米手机'); select * from goods;
二、查看触发器
查看所有触发器
show triggers;
查看触发器创建语句
show create trigger 触发器名称;
show create trigger my_good_order;
三、触发器使用
不需要手动调用,而是当某种情况发生时自动触发
四、删除触发器
drop trigger 触发器名称;
drop trigger my_good_order;