mysql中触发器与存储过程

一. 触发器

1.1什么是触发器

    简单的说触发器就是某个表发生一个事件(增删改操作),然后自动的执行预先编译好的SQL语句,执行相关操作。触发器事件跟触发器中的SQL语句是原子性的(要么同时执行,要么同时不执行),这样保证了数据的完整性。

1.2触发器的语法

    delimiter $       -- 表示语句的结束标志

    create trigger 触发器名称 before/after  insert/update/delete on 表名 for each row -- 每一行变动触发

    begin

        SQL语句

    end$

    delimiter   ;  -- 此处必须有空格

上面的语法意思就是在执行表的增删改之前或之后,完成对应事件的触发。

1.3例子说明

首先创建商品跟订单两张表


查看表结构

添加数据

编写触发器

实现订单

问题:如果订单的数量大于商品的数量,则有问题,修改触发器

如果是订单取消,则我们对应的商品的数量则应该返还。

修改触发器

执行订单取消后

1.4相关说明

delimiter $ : 这个改变输入的结束符,我们触发器内部SQL开始于begin,结束于end,这中间可能有多条SQL语句,我们不能在遇到";"就代表结束,故相当于重新定义结束符$。最后一行"delimiter   ;"注意有空格,这里相当于告诉mysql,结束符还是用“;”。

new:当触发器添加或更新事件时,代表对应被操作的记录。我们在产生订单时,商品数量 = 当前商品数量 - 订单数量。获取订单数就是用new来表示。

old:当触发器删除或更新事件时,代表对应的被操作的记录。订单取消,商品数量 = 当前商品数量 + 订单数量。订单数就是被取消(delete)的,用old表示。

二.存储过程

2.1 函数

函数分为内部函数,例如聚合函数,SUM,AVG等等,还有自定义的函数。

创建函数类似于触发器,不过关键字变为了function,同时必须有返回值。

set定义的是全局变量,我们可以直接查询到,declare定义的为局部变量,无法外部访问

2.2存储过程

存储过程类似于函数,不过存储过程没有返回值,而且调用存储过程是用call

三.触发器与存储过程的比较

触发器是事件发生时自动发生,不需要手动调用,而存储过程是需要手动调用。一般开发中,如果如果事件SQL比较复杂,不推荐用触发器,因为会导致后期维护比较困难。而存储过程一般用来实现 SQL语句比较复杂的功能。存储过程类似于java中的方法,供其他方法中调用,我们可以在后台代码直接调用存储过程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值