mysql 触发器

触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,

                           比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 简单讲触发器(trigger)就是监视某种情况,并触发某种操作。

触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)

创建触发器:

//商品表

CREATE TABLE `g` (

`gId` int(4) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

`num` int(4) NOT NULL,

PRIMARY KEY (`gId`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

//订单表

CREATE TABLE `o` (

  `oId` int(4) NOT NULL AUTO_INCREMENT,

  `gId` int(4) NOT NULL,

  `much` int(4) NOT NULL,

  PRIMARY KEY (`oId`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

//插入数据

INSERT INTO `g` VALUES ('1', '商品1', '10');

INSERT INTO `g` VALUES ('2', '商品2', '10');

INSERT INTO `g` VALUES ('3', '商品3', '10');

//创建触发器

CREATE TRIGGER tg1

AFTER INSERT ON o

for EACH ROW

BEGIN

UPDATE g SET num=num-3 where gId=1;

END $

//执行 下订单

insert into o(gId,much) values(1,3)$

//删除 触发器 

drop trigger tg1 $



说明:

  当我们 下订单 购买商品1  3个时  

  执行 select * from g where gId=1

  会发现 num=7  

 案例:

       上面的数据是死数据,但在开发过程中对某件商品购买几件是动态的 (表关系同上)

//触发器  当用户购买商品时更新商品数量

create trigger tg2

after insert on o

for each row 

begin

update g set num=num-new.much where gId=new.gId;

end $

//用户下单 (购买商品)

insert into o(gId,much) values(2,5)$

//触发器 当用户撤销订单时更新数量

create trigger tg3

after delete on o

for each row

begin

update g set num = num + old.much where gId = old.gId;

end $

//用户撤销订单

delete from o where oId = 1 $

//触发器 用户修改订单内商品的数量

create trigger tg4

after update on o

for each row

begin

    update g set num = num+old.much-new.much where gId =old.gId/new.gId;

end $

//用户修改订单数量

update o set much =3 where oId = 2 $
View Code

 

你可能感兴趣的:(mysql)