位置:编程技术网 > 游戏开发 > 正文 >

MySQL触发器、存储过程实现

2020年07月18日 21:21来源:未知手机版

中秋节的习俗和来历,高收益理财项目,sp通道

MySQL触发器、存储过程实现

很多程序员在出去面试的时候都会存在这样一个问题,就是笔试题中对于sql语句的考察,很多关键字的写法忘记了甚至是完全没有用过,但是如果你能百度一下或者看一下之前写的代码又会瞬间想起来,这其实是一个比较尴尬的问题,仅仅的因为一个关键字就能否定你的sql能力或者代码能力吗?当然这是很片面的。但是sql的关键字又实在是太多,一个一个整理未免太多复杂,所以我这里不过多的介绍了,碰到了,自己查下资料即可。今天主要介绍的是触发器、存储过程的用法。

触发器的语法:

Delimiter $

Create trigger 触发器名称

After/before insert/update/delete on 表名

For each row #每隔一行执行一次动作,而不是对整个表(mysql中一般是固定写法)

Begin

sql语句

End$

Delimiter ;

解释一下,上面的语法意思:

在执行表的增删改之后或之前,完成事件的触发

下面,我们看下具体的例子,场景如下:

>当我们向订单中插入数据时,商品表中的对应商品要减少对应的数量,这里我们使用触发器来实现;

触发器代码:

>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 存储过程名称();#调用存储过程

本文地址:http://www.reviewcode.cn/youxikaifa/157727.html 转载请注明出处!

今日热点资讯