《MySQL必知必会》--存储过程
存储过程(存储程序)
概念
- 存储过程简单来说,就是为了以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批处理文件,虽然他们的作用不仅限于批处理。
为什么使用存储过程?
- 通过把处理封装在容易使用的单元中,简化复杂的操作;
- 由于不要求反复建立一系列处理步骤,这保证了数据的完整性(所有开发人员使用同一代码,减少出错的机率);
- 简化对变动的管理(只需在存储过程中修改变动,使用人员甚至可能都不知道已经发生了改变);
- 提高性能(使用存储过程比单独使用SQL语句要更快);
- 简单而言就是:简单、安全、高性能。
创建存储过程
存储过程有两种形式,一是没有参数的存储过程,一是包含参数的存储过程。具体形式见代码,及其后解读。
无参数存储过程:
1 |
|
有参数存储过程:
1 |
|
- 在MySQL WORKBENCH 中使用存储过程需要首先使用
DELIMITER
将分隔符从;
转换为//
,以便在存储过程中存储;
; - 在存储过程编写完毕后不要忘记将默认分隔符转换为
;
; - 关键字
OUT
指出相应的参数用来从存储过程传出一个值;MySQL还支持IN
(传递给存储过程)和ONOUT
(对存储过程传入和传出)类型的参数; - 存储过程写在
BEGIN
与END
之间; - 无论是否需要使用参数,命名的存储过程后必须有
( )
,当使用参数时,将参数写入( )
中; - 每个参数必须指定参数类型,本代码中制定为十进制类型。
使用存储过程
对应上面两类型的存储过程,有两种存储过程使用类型。
1 |
|
- 没有参数的存储过程直接使用
CALL
语句加存储过程名就可以; - 对于包含
OUT
参数的存储过程,首先对各自参数命名一个对应的变量名; IN
参数代表需要向存储过程输入数据,因此需要先IN
对应的输入参数数据和OUT
对应的变量名。- MySQL系统中所有的变量名必须以
@
开头。
删除存储过程
1 |
|
- 删除存储过程不用在存储过程名后加
( )
; - 第一条代码是直接删除,如果该存储过程不存在,则系统会报错;
- 第二条代码是仅当存在删除,如果不存在也不会产生错误。
建立智能存储过程
至今为止使用的所有存储过程基本上都是封装MySQL简单的SELECT语句。虽然有效,但是效率或许甚至不如直接使用这些简单的SELECT语句。
只有在存储过程内包含业务规则和智能处理时,存储过程的威力才能显示出来。
考虑这个场景。你获得和以前一样的订单合计,但是需要对合计增加营业税,不过只针对某些客户。那么,你需要做下面几件事:
- 获得合计(与以前一样);
- 把营业税有条件地添加到合计;
- 返回合计(带或者不带税)。
存储过程完整工作如下:
1 |
|
- 当代码复杂时,增加注释是一个好习惯。
- 使用
DECLARE
定义局部变量。其中taxable为布尔值,taxrate为整数型且定义了默认值。 - IF语句检查taxable是否为真,若为真增加营业税。
COMMENT
不是必须的,但如果给出将在SHOW PROCEDURE STATUS
的结果中显示。
那么该代码如何运行呢?
1 |
|
taxable为
BOOLEAN
(布尔值),指定为0表示假,指定为1表示为真(实际上指定非零值都表示为真)
检查存储过程
1 |
|
使用该命令可以查看该存储过程何时、由谁创建等详细信息。
1 |
|
该代码可以列出所有存储过程。为限制其输出,可使用LIKE指定一个过滤模式,例如:
1 |
|
小结
这是自学习SQL语言后遇到的第一章很难理解的章节,并不像其他章节一样看一遍,然后就可以输入了。
尤其是最后一个例子需要再次好好研究研究。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!