MySQL触发器学习总结

所属分类: 数据库 / Mysql 阅读数: 1039
收藏 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 select in 按id排序实现方法

有时候我们在后台选择了一系列的id,我们想安装填写id的顺序进行排序,那么就需要下面的order by方法,测试通过
收藏 0 赞 0 分享

mysql 超大数据/表管理技巧

在实际应用中经过存储、优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒。看上去是个不错的成绩,不过优化这条路没有终点,当我们的系统有超过几百人、上千人同时使用时,仍然会显的力不从心
收藏 0 赞 0 分享

mysql占用CPU过高的解决办法(添加索引)

下面是MYSQL占用CPU高处理的一个例子,希望对遇到类似问题的朋友们有点启发。一般来说MYQL占用CPU高,多半是数据库查询代码问题,查询数据库过多。所以一方面要精简代码,另一方面最好对频繁使用的代码设置索引
收藏 0 赞 0 分享

MySQL自增列插入0值的解决方案

基于业务逻辑的要求,需要在MySQL的自增列插入0值,针对此需求,本文给予详细的解决方案,感兴趣的你可以参考下哈,希望可以帮助到你
收藏 0 赞 0 分享

Mysql中的find_in_set的使用方法介绍

Mysql中的find_in_set的使用方法介绍,需要的朋友可以参考一下
收藏 0 赞 0 分享

如何用cmd连接Mysql数据库

如何用cmd连接Mysql数据库,需要的朋友可以参考一下
收藏 0 赞 0 分享

SQL字符型字段按数字型字段排序实现方法

由于是按字母顺序排列,所以123排在了2的前面,显然不符合我们的要求,那么怎样才能按照我们预想的数字顺序排序呢
收藏 0 赞 0 分享

服务器不支持 MySql 数据库的解决方法

出现问题:报错“服务器不支持 MySql 数据库”,改函数function_exists('mysql_connect')返回 false
收藏 0 赞 0 分享

MySQL SELECT同时UPDATE同一张表问题发生及解决

例如用统计数据更新表的字段(此时需要用group子句返回统计值),从某一条记录的字段update另一条记录,而不必使用非标准的语句,等等感兴趣的朋友可以参考下哈
收藏 0 赞 0 分享

Windows环境下重置mysql密码操作命令

Windows XP系统、xampp集成环境如何重置mysql密码,接下来为大家详细介绍下,感兴趣的各位可以参考下哈,希望可以帮助到你们
收藏 0 赞 0 分享
查看更多