MySQL触发器学习总结

所属分类: 数据库 / Mysql 阅读数: 885
收藏 0 赞 0 分享
复制代码 代码如下:

#创建触发器,当往order表中添加记录是,更新goods表
delimiter $
CREATE TRIGGER trigger1
AFTER INSERT ON `order`
FOR EACH ROW
BEGIN
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$


执行
INSERT INTO `order` (gid,much) VALUES(1,5)

SELECT * FROM goods WHERE id=1

发现 电视机的数量剩下30

当执行
INSERT INTO `order` (gid,much) VALUES(2,100)

发现
冰箱的数量剩下-77

这是一个很明显的漏洞,如何补救呢?
由于update事件是在insert之后发生的,所以我们无法事先对用户的下单数量(即order表
中的much字段)进行过滤
解决办法:
在创建触发器的时候,将after关键字改成before,并对用户的下单数量进行判断


首先,得删除先去的触发器
drop trigger trigger1;
复制代码 代码如下:

#创建触发器
#触发时间:before
delimiter $
CREATE TRIGGER trigger1
BEFORE INSERT ON `order`
FOR EACH ROW
BEGIN
IF new.much >5 THEN
SET new.much=5
END IF;
UPDATE goods SET num=num-new.much WHERE id=new.gid;
END$

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

MySQL的日志基础知识及基本操作学习教程

这篇文章主要介绍了MySQL的日志基础知识学习教程,包括MySQL中日志相关常用的服务器变量说明,极力推荐!需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL入门完全指南及Linux系统下基本的安装教程

这篇文章主要介绍了MySQL入门完全指南及Linux系统下基本的安装教程,对MySQL的基本特性有一个较为详细的整理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL针对Discuz论坛程序的基本优化教程

这篇文章主要介绍了MySQL针对Discuz论坛程序的基本优化教程,包括在缓存和索引等方面的优化方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的InnoDB引擎入门学习教程

这篇文章主要介绍了MySQL的InnoDB引擎入门学习教程,对InnoDB的存储结构有一个较好的总结,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL下常见的启动失败与备份失败问题的解决教程

这篇文章主要介绍了MySQL下常见的启动失败与备份失败问题的解决教程,示例环境基于Linux系统,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL日志分析软件mysqlsla的安装和使用教程

这篇文章主要介绍了MySQL日志分析软件mysqlsla的安装和使用教程,文中以Linux系统作为环境进行示例,需要的朋友可以参考下
收藏 0 赞 0 分享

修改MySQL的默认密码的四种小方法

对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,下文中就教给大家如何修改MySQ的默认密码。
收藏 0 赞 0 分享

傻瓜式用Eclipse连接MySQL数据库

本来不想写这么简单人文章,在百度上搜索我这个标题,完全符合标题的一大堆。但我按照那些文章捣鼓了很久,就是不行。
收藏 0 赞 0 分享

修改MySQL的数据库引擎为INNODB的方法

本文主要介绍了修改MySQL的数据库引擎为INNODB的方法,希望能对您有所帮助。
收藏 0 赞 0 分享

Mysql数据库命令大全

mysql命令大家经常会用到,但是很少有朋友整理吧,最近项目不多,抽个时间把mysql数据库命令总结给大家,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多