目录
存储过程
经常会有一个完整的操作需要多条语句才能完成。例如,考虑以下的情形。
为了处理订单,需要核对以保证库存中有相应的物品。
如果库存有物品,这些物品需要预定以便不将它们再卖给别的人, 并且要减少可用的物品数量以反映正确的库存量。
库存中没有的物品需要订购,这需要与供应商进行某种交互。
关于哪些物品入库(并且可以立即发货)和哪些物品退订,需要通知相应的客户。
存储过程简单来说,就是
为以后的使用而保存的一条或多条MySQL语句的集合
。可将其视为批文件,虽然它们的作用不仅限于批处理。
为什么要使用存储过程(简单、安全、高性能)
优势
通过把处理封装在容易使用的单元中,
简化复杂的操作
(正如前面例子所述)。
由于不要求反复建立一系列处理步骤,这
保证了数据的完整性
。如果所有开发人员和应用程序都使用同一(试验和测试)存储过 程,则所使用的代码都是相同的。这一点的延伸就是
防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
简化对变动的管理
。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要
知道这些变化。这一点的延伸就是
安全性。通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会。
提高性能
。因为使用存储过程比使用单独的
SQL
语句要快。
存在一些只能用在单个请求中的
MySQL
元素和特性,存储过程可 以使用它们来编写功能更强更灵活的代码(在下一章的例子中可 以看到。)
缺点
一般来说,存储过程的编写比基本
SQL
语句复杂,编写存储过程需要更高的技能,更丰富的经验。
你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。
使用存储过程
执行存储过程
CALL接受存储过程的名字以及需要传递给它的任意参数
创建存储过程
****************重要***********************
****************Mysql命令行客户机的分隔符***********************
![](https://i-blog.csdnimg.cn/blog_migrate/e6c211fd9d51226dbe2c5900b03e7a41.png)
![](https://i-blog.csdnimg.cn/blog_migrate/da8d3374866f89176dec046f1ffa6f4f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e736a32442ffff1c70c375efbd0d3853.png)
删除存储过程
使用参数
一般,
存储过程并不显示结果,而是把结果返回给你指定的变量
。
Mysql变量都必须以@开始
![](https://i-blog.csdnimg.cn/blog_migrate/0835cf102cee0ccea4cfbbbd175a9504.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5e08ad8b8cc0378c5b66e33765e5f313.png)
使用
IN
和
OUT
参数
![](https://i-blog.csdnimg.cn/blog_migrate/07ed635e5b6dee64ad036c20dcf5ab71.png)
![](https://i-blog.csdnimg.cn/blog_migrate/123fb2085c788d53a0aba92ed82add65.png)
建立智能存储过程
只有在存储过程内包含业务规则和智能处理时, 它们的威力才真正显现出来
考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么, 你需要做下面几件事情:
获得合计(与以前一样);
把营业税有条件地添加到合计;
返回合计(带或不带税)。
![](https://i-blog.csdnimg.cn/blog_migrate/662dc07fb547845ab7caf6aeda6dbf23.png)
![](https://i-blog.csdnimg.cn/blog_migrate/430d5d7d01e29ef5f3d1887d777383b6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7915646886f4ace0d0ebbca75a0dc673.png)
检查存储过程
显示用来创建一个存储过程的CREATE语句
获得包括何时、由谁创建等详细信息的存储过程列表
使用SHOW PROCEDURE STATUS。