最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

MySQL存储过程_什么是存储过程?

XAMPP教程 admin 19浏览 0评论

GA0000098

MySQL的存储过程这真的是一个老生常谈的问题在此,我会通过案例,demo来帮助大家理解

 

[toc]

- 什么是存储过程

- 创建存储过程

- 语法格式

- 修改结束符

- demo

- 创建不带参数的存储过程

- 创建带参数的存储过程

- 修改存储过程

- 语法格式

删除存储过程

- 语法格式

GA098

什么是存储过程
简单理解就是将一大串sql的集合,或者我们需要在sql语句中设置一些变量的值。存储过程存在的优点:

- 封装性

在存储过程被创建后,可以在程序中多次被调用,而不用多次写sql语句。

- 增强灵活性

类似于将代码的方法块进行提取,提高解耦性

- 高性能

存储过程执行一次后,就会产生二进制代码在缓冲区,以后再调用的话,就去缓冲区中执行二进制代码,提高了效率

 

GA0098

创建存储过程
可以使用 CREATE PROCEDURE 语句创建存储过程。 

语法格式

 

CREATE PROCEDURE <过程名> ([过程参数[,...]])<过程体>

[过程参数[,...]] 格式

[in | out | inout]<参数名><类型>

 

下面我们对刚刚的模版参数进行解释:

过程名:存储过程的名称,尽量不要和mysql内置函数相同的名称重复。

 

过程参数:也就是参数类型(可以是任何有效的mysql数据类型)。当有多个参数时,参数列表中用逗号分隔,也可以没有参数,但还是要有一对括号。mysql存储过程支持三种数据类型的参数,即

- 输入参数:用IN表示,可以传递给一个存储过程。

- 输出参数:用OUT表示,可以存储过程中返回一个操作结果的情形。

- 输入/输出参数:分别用INOUT表示,既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名重复。

 

过程体:存储过程的主要部分,也就是要执行的sql语句。但是这部分需要以关键字BEGIN开始,以关键字END结束。若存储过程中只有一条sql语句,则可以省略BEGIN-END标志。

 

在存储过程中,常会用到DELIMITER命令。

 

简单说,存储过程本身就是将大量的sql整合到一块。对于数据库而言,默认遇到分号就结束当前sql过程。显然不可以的,因为咱们是大量的sql语句,因为用DELIMITER命令修改结束字符 

 GA00098

修改结束符DELIMITER $$

- \$$是说定义特殊符号,来取缔默认;来作为结束符号

- 当使用DELIMITER命令时,尽量避免使用反斜杠

 

DELIMITER ??

– 当执行执行这条后,任何命令,语句都会将结束符替换为??

– 若希望再换回默认的分号,则输入

DELIMITER ;

 

DELIMITER ??-- 当执行执行这条后,任何命令,语句都会将结束符替换为??
-- 若希望再换回默认的分号,则输入DELIMITER ;

 

注意:

- DELIMITER与特殊符号之间一定要有空格

- 在创建存储过程时,必须要有 CREATE ROUTINE 权限

- 查看数据库都有哪些存储过程:SHOW PROCEDURE STATUS

- 若要查看某个存储过程的具体信息:SHOW CREATE PROCEDURE <存储过程名>

 

demo
 创建不带参数的存储过程

> 创建名称为ShowStuScore的存储过程。
存储过程的作用是从学生成绩信息表中查询出学生的成绩信息。

 

mysql> DELIMITER //mysql> CREATE PROCEDURE ShowStuScore()    -> BEGIN    -> SELECT * FROM tb_students_score;    -> END //

 

创建完成后,要用CALL语句进行调用

 

mysql> DELIMITER ;mysql> CALL ShowStuScore();+--------------+---------------+| student_name | student_score |+--------------+---------------+| Dany         |            90 || Green        |            99 || Henry        |            95 || Jane         |            98 || Jim          |            88 || John         |            94 || Lily         |           100 || Susan        |            96 || Thomas       |            93 || Tom          |            89 |+--------------+---------------+

 

创建带参数的存储过程> 创建名称为GetScoreByStu的存储过程
输入的参数是学生姓名,然后输出的是学生成绩 

mysql> DELIMITER //mysql> CREATE PROCEDURE GetScoreByStu    -> (IN name VARCHAR(30))    -> BEGIN    -> SELECT student_score FROM tb_students_score    -> WHERE student_name=name;    -> END //

 

创建完存储过程后就开始用CALL语句进行调用

 

mysql> DELIMITER ;mysql> CALL GetScoreByStu('Green');+---------------+| student_score |+---------------+|   99          |+---------------+

 修改存储过程

在实际业务中,一定会有改需求改需求改需求。因此,存储过程也要进行修改。

 

语法格式

 

ALTER PROCEDURE 语句修改存储过程的某些特征

语法格式:
ALTER PROCEDURE <过程名> [<特征>...]

仅适用于修改存储过程的某些特征,如果要修改内容,先删除后创建。

 

注意:

修改存储过程的内容:先删除原存储过程,再创建相同名称的存储过程

修改存储过程的名称:先删除原存储过程,再创建不相同名称的存储过程

 

删除存储过程
使用 DROP PROCEDURE 语句删除数据库中已创建的存储过程。 

语法格式

DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>

 

注意:

要确定该存储过程与其他没有存储依赖,类似于azkaban的脚本依赖。

 

mysql> DROP PROCEDURE GetScoreByStu;Query OK, 0 rows affected (0.00 sec)mysql> CALL GetScoreByStu('Green');ERROR 1305 (42000): PROCEDURE test_db.GetScoreByStu does not exist

转载请注明:XAMPP中文组官网 » MySQL存储过程_什么是存储过程?