MySQL触发器学习总结
发布时间:2024-01-14 10:31:38
标签:MySQL触发器
#创建触发器,当往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操作,借此可以对下单数量做个判断


猜你喜欢
- 本文实例为大家分享了python实现微信防撤回神器的具体代码,供大家参考,具体内容如下手写辛苦,希望给赞#!/usr/local/bin/p
- 前言玩博客一个多月了,渐渐发现了一些有意思的事,经常会有人用同样的评论到处刷,不知道是为了加没什么用的积分,还是纯粹为了表达楼主好人。那么问
- 本文实例讲述了JavaScript设计模式之模板方法模式原理与用法。分享给大家供大家参考,具体如下:一、模板方法模式:一种只需使用继承就可以
- 本来想着做一个将图片识别为文字的小功能,本想到Google上面第一页全是各种收费平台的广告。这些平台提供的基本都是让我们通过调用相关的三方接
- 1.较复杂的查询操作1.1 参数占位符 #{} 和 ${}#{}:预处理符,如将id=#{2}替换为id=?,然后使用2替换?。${}:替换
- 线性判别分析(linear discriminant analysis),LDA。也称为Fisher线性判别(FLD)是模式识别的经典算法。
- 页面域关系:主页面a.html所属域A:www.aspxhome.com被iframe的页面b.html所属域B:www.cidianwan
- 炸金花题目很简单:就是自己写一个程序,实现诈金花游戏的发牌、判断输赢。规则:一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢。牌
- 导语亲爱的小可爱们,大家好! 欢迎来到木子的游戏编程空间经常听到有朋友说,学习编程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是
- 所谓类属性的延迟计算就是将类的属性定义成一个property,只在访问的时候才会计算,而且一旦被访问后,结果将会被缓存起来,不用每次都计算。
- 前言最近在做文本统计,用 Python 实现,遇到了一个比较有意思的难题——如何保存统计结果。直接写入内存实在是放不下,十几个小时后内存耗尽
- 今天发现一个google广告的另类调用方法function addGoogel (content, obj) { addScript(
- 简介:格式:map(function,iterable,……)参数说明:function:是表示
- json 作为一种通用的编解码协议,可阅读性上比 thrift,protobuf 等协议要好一些,同时编码的 size 也会比 xml 这类
- 1. 前言上一篇介绍了 Go并发控制--Channel使用channel来控制子协程的优点是实现简单,缺点是当需要大量创建协程时就需要有相同
- 本文实例为大家分享了Python实现神经网络算法及应用的具体代码,供大家参考,具体内容如下首先用Python实现简单地神经网络算法:impo
- 分组小括号() 有直接分组和命名分组直接分组: ()分组只显示小括号括起来的内容re.findall(r"(name)+
- BootStrap模态框简单概述Bootstrap Modals(模态框)是使用定制的 Jquery 插件创建的。它可以用来创建模态窗口丰富
- 前言上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看
- 用过vuex的肯定会有这样一个痛点,就是刷新以后vuex里面存储的state就会被浏览器释放掉,因为我们的state都是存储在内存中的。所以