MYSQL---触发器简单了解

触发器 trigger

1、触发器是指事先为某张表绑定一段代码,当表中某些内容发生改变(增insert、删delete、改update)时,系统自动触发绑定的那段代码并执行。比如 一旦订单表里插入新订单,商品的库存数自动减N.

2、触发器的三要素:

事件因素:insert、删delete、改update

触发时间:前before、后after

触发对象:表中每条记录,即整个表

那么每张表可以有6个触发器(增、删、改3个事件的前和后)

3、创建触发器

delimiter--自定义符号

create trigger+触发器名称+触发器时间+事件类型 on 表名 for each row;

begin--触发器内容的开始

---触发器内容主体

end--触发器内容结束

delimiter.--恢复语句结束符

4、以商品表goods  和订单表odrer举例说明触发器,sql语句如下:

创建商品表:

create table goods(

         in int primary auto_increment,

         name varchar(20) not null,----- not null:意思是不允许给这个字段插入空值

         price decimal(10,2)  default 0,------------decimal一种数据类型,decimal(5,2)表示一共5位数,小数位2位,整数位5-2位

                                                                       default:当没有给此字段插入值时,默认给的值

         inventory int comment '商品库存量'-----comment  类似注释,备注说明的意思

)

create table goods( id int primary key auto_increment, name varchar(20) not null, price int, inventory int );

插入商品:

insert into goods values (1,‘Apple’,11,100),(2,‘Pear’,21,100);

 

创建订单表

create table orders (id int primary key auto_increment, good_id int,good_num int);

创建触发器

delimiter $$--临时修改语句结束符

create trigger after_order after insert on orders for each row

begin---触发器主体内容开始

update goods set invenment=invenment-1 where id=1;--触发器主体内容,每行要以分号;结束

end---触发器主体内容结束

$$--结束语句

deloimiter;恢复语句结束符

使用触发器

 

由结果可以看出,在给订单表添加一条记录后,商品表中对应的商品库存数减了1(先不管数量应该减10)

触发器的触发对象和事件类型,一定不能和触发主体相同,否则容易造成死循环

原文地址:https://www.cnblogs.com/sunny0/p/8955684.html