MySQL触发器、存储过程实现_存储过程和触发器的实现

new.order_count 和new.g_id都是订单表中新传入的数据,根据新插的值进行动态更新

执行如下代码:

意为在我向订单表中插入数据之后,触发 更新商品表的sql语句

插入前:

插入后:

到这里,触发器的实现就已经完全写完了。但是,这里还可能存在一种情况,用户如果不想买了,我们应该如何处理,你需要把订单表的记录删除,然后把对应的商品数量加回去。

触发器:

需要注意的是我们这里不能再使用new.order_count 和new.g_id,而应该换成对应的old,因为我们要删除的信息不是新插入的,而是用的之前的,这一点应该是不难理解的。

执行如下代码:

删除后:

可以看到,此时的面包数量已经加回来了;

上述代码写得都是先执行增删改,再进行触发,下面我们演示先触发,再进行对应的增删改

结合具体实例:

用户在购买的时候,我们实际开发中需要先对商品数量进行判断,如果,商品库存不足或者小于订单购买量,此时应提示库存不足。

同样,需要用到before关键字,意为先触发事件,再进行增删改

触发器代码如图:

执行下面代码:

插入前:

插入后:

可以看到,我们明明购买了10个,但是库存只有8个,所以经过判断我们最多只能购买8个,当然,这里呢,也会存在一个问题,这个sql里面的8写的并不规范,正常来讲,应该先查询数量,再判断,这里只是解释after和before的区别。

存储过程语法:

Create procedure 存储过程名称(in/out 参数名 参数类型)

Begin

带参数的Sql代码

End

Call 存储过程名称();#调用存储过程

查询结果:

类似于java里面的一个方法,通过set来给参数赋值,调用方法,获得查询结果

另外,提一句,有的人用的declare 给参数赋值,不是用的set,区别是:declare设置的是局部变量,set设置的是全局变量,大家可以自己试试。

总结:看起来触发器和存储过程的区别不是很大,比如我用触发器实现的功能放在存储过程中运行也没有问题,那么这两者如何区分呢?首先,触发器的执行不需要手动去调用,只要执行对应的sql就可以完成相应的事件触发,而存储过程必须手动去调用,这里的存储过程其实更类似于我们java中的方法;事实上,在实际的开发中,一般的简易的sql根本没有必要写存储过程,存储过程一般用来实现比较复杂的查询逻辑,用的时候调用即可。

以上

需要更多教程,微信扫码即可

👆👆👆

别忘了扫码领资料哦【高清Java学习路线图

全套学习视频及配套资料****

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值