注册|登录

联系电话:024-31891684  13390130939
沈阳软件公司--沈阳软件定制

沈阳软件开发_沈阳软件公司_沈阳软件定制/软件/最新技术

Latest technology最新技术

MySQL触发器学习总结

浏览量:2497

#创建触发器,当往order表中添加记录是,更新goods表

delimiter $

CREATETRIGGERtrigger1

AFTER INSERTON`order`

FOREACH ROW

BEGIN

UPDATEgoods SETnum=num-new.much WHEREid=new.gid;

END$

 

执行

INSERTINTO`order` (gid,much) VALUES(1,5)

SELECT*FROMgoods WHEREid=1

发现电视机的数量剩下30

 

当执行

INSERTINTO`order` (gid,much) VALUES(2,100)

发现

冰箱的数量剩下-77

 

这是一个很明显的漏洞,如何补救呢?

由于update事件是在insert之后发生的,所以我们无法事先对用户的下单数量(即order表

中的much字段)进行过滤

解决办法:

在创建触发器的时候,将after关键字改成before,并对用户的下单数量进行判断

 

 

首先,得删除先去的触发器

droptriggertrigger1;

 

#创建触发器

#触发时间:before

delimiter $

CREATETRIGGERtrigger1

BEFORE INSERTON`order`

FOREACH ROW

BEGIN

IFnew.much >5THEN

SETnew.much=5

ENDIF;

UPDATEgoods SETnum=num-new.much WHEREid=new.gid;

END$
这样,当执行INSERT INTO `order` (gid,much) VALUES(2,100)的时候,写入order表的下单数量其实只有5,同样,goods表中的库存数量只有减少5,因为在insert操作之前先触发了
update操作,借此可以对下单数量做个判断

沈阳团购网|营口网站制作|沈阳软件公司|软件定制|网站建设|加盟易势|提交问题