day17:触发器

触发器(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;
原文地址:https://www.cnblogs.com/wuguiyu/p/11934399.html