mysql必知必会》学习笔记十三(存储过程)。
存储过程

什么是存储过程、为什么要使用存储过程、如何使用存储过程、创建和使用存储过程的基本语法

————————————– ————————————– ————————————–

存储过程定义
理解:
大多说SQL语句都是针对一个或者多个表的单条语句。并非所有的操作都是这么简单,经常会有一个完整的操作需要多条语句才能完成。我们考虑一下情景:
1)为了处理订单,我们需要核对以保证库存中有相应的物品。
2)如果库存有物品,这些物品需要预定以便不将他们再卖给别人,并且要减少可用的物品数量以反映正确的库存量。
3)库存中没有的物品需要订购,这需要与供应商进行某种交互。
4)关于哪些物品入库(并且可以立即发货)和哪些物品退订,需要通知相应的客户。
执行这些处理需要针对许多表的多条MySQL语句。另外,需要执行的具体语句及次序也不是固定的,他们可能会(和将)根据哪些物品在库存中哪些不在而变化。
那么,我们该如何编写代码?
首先我们可以单独的编写每条语句,并根据结果又条件地执行另外的语句。在每次需要这个处理时(或者每个需要他的应用中)都必须做这些工作。

那么。有没有简单的方法?

于是,我们可以创建存储过程。

存储过程就是为了以后的使用而保存的一条或者多条MySQL语句的集合。可将视为批文件,虽然他们的作用不仅限于批处理、

为什么使用储存过程?

1.通过把处理封装在容易使用的单元中,简化复杂的操作;

2.由于不要求反复建立一系列处理步骤,着保证了数据的完整性。如果所有开发人员和应用程序都使用同一(实验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大,防止错误保证了数据的一致性。

3.简化对变动的管理,如果表名。列名或者业务逻辑等有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点延伸就是安全性,通过存储过程限制对基数据的访问减少了数据讹误的机会。

4.提高性能。因为使用存储过程比使用单独的sql语句更快。

5.存在一些只能用在单个请求的MySQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码

综上:
三个主要的好处:简单、安全、高性能。
两个缺陷:
1、存储过程的编写更为复杂,需要更高的技能更丰富的经验。
2、可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的 创建权限,允许使用,不允许创建。
执行存储过程(调用)

Call关键字:Call接受存储过程的名字以及需要传递给他的任意参数。存储过程可以显示结果,也可以不显示结果。

非命令窗下创建存储过程【可视化工具】:

CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG( prod_price) as priceaverage FROM products;
END;

创建名为productpricing的储存过程。如果存储过程中需要传递参数,则将他们在括号中列举出来即可。括号必须带(有没有很类似于java中的函数)。BEGIN和END关键字用来限制存储过程体。上述存储过程体本身是一个简单的select语句。注意这里只是创建存储过程并没有进行调用。

注意注意再注意:
命令行客户机的分隔符
MySQL默认的分隔符为 ;mysql命令行实用程序也是实用;作为语句分隔符。 如果命令行使用程序要解释的存储过程自身内的;字符,则他们终将不会成为储存过程的成分,这回使存储过程中的SQL语句出现语法错误。
解决办法就是临时更改命令行实用程序的语句分隔符
使用关键字delimiter
命令窗下的创建储存过程:
Delimiter // //解释使用新的符号//作为结束分隔符
Create procedure productpring()
Begin
Select AVG(prod_price) as priceaverage from products; //语句一定带符号
End // // 结束用新的分隔符
Delimiter ; //重新还原默认的分号分隔符

除了\符号外,任何字符都可以用于语句分隔符。记得在使用新的符号作为结束分隔符后,要记得还原。

存储过程是一种特殊的函数,所以存储过程名后需要有()符号,不管是否带参

储存过程的使用:

Call productpring();
《MySQL必知必会》学习笔记十三(存储过程)------掌握部分 mysql mysql数据库 mysql函数 ...
删除存储过程

删除存储过程 关键字DROP;


《MySQL必知必会》学习笔记十三(存储过程)------掌握部分 mysql mysql数据库 mysql函数 ...

注意:当我们删除不存在的存储过程时,系统会给我们报错,因此我们可以使用”if exists “ 进行过滤。仅当存在时,进行删除。还有,删除存储过程只给出储存过程名即可,不需要带括号,(一般带括号的都表示直接运行)

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

分页:12
转载请注明
本文标题:《MySQL必知必会》学习笔记十三(存储过程)------掌握部分 mysql mysql数据库 mysql函数 ...
本站链接:http://www.codesec.net/view/535053.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(66)