mysql存储过程
1. 什么是存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
说明:mysql从5.0版本之后开始支持存储过程
2. 存储过程优缺点
优点:
- 增强sql的灵活性
- 增加业务的复用性,存储过程创建成功后可以多次调用
- 执行速度快
- 距离需要处理的数据近,减少网络流量
- 减少应用程序和数据库的交互次数
缺点:
- 数据库的移植性差
- 维护性没有java等编程语言好,调试不方便
3. 语法结构
3.1 基本语法
delimiter $$
create proceure 过程名称([[IN|OUT|INOUT] 参数名 数据类型,...])
begin
-- sql; 语句
end $$
delimiter;
delimiter $$
create procedure 过程名称([[IN|OUT|INOUT] 参数名 数据类型,...])
begin-- sql; 语句
end $$
delimiter ;
示例:
delimiter $
#指定分隔符
create procedure pro_hello_word()
begin
select 'hello word';
end;
$
delimiter ; #还原分隔符
delimiter $#指定分隔符
create procedure pro_hello_word()
beginselect 'hello word';
end;
$
delimiter ; # 还原分隔符
调用:
存储过程的删除
drop procedure 存储过程
3.2 参数
参数类型包括:in,out,inout
- in: 输入参数,在调用过程时指定,即使在过程中被改动,也不能返回
- out:该值可在存储过程内被改变,可返回
- inout: 调用时指定,在过程中可改变可返回
IN参数示例:
mysql> delimiter $
mysql> create procedure pro_in_param(in p_in int)-> begin-> select p_in;-> set p_in=1000;-> select p_in;-> end;-> $
Query OK, 0 rows affected (0.00 sec)mysql> set @p_in=1;-> call pro_in_param(@p_in);-> $
Query OK, 0 rows affected (0.00 sec)+------+
| p_in |
+------+
| 1 |
+------+
1 row in set (0.00 sec)+------+
| p_in |
+------+
| 1000 |
+------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)# 变量的之并没有变化
mysql> select @p_in;-> $
+-------+
| @p_in |
+-------+
| 1 |
+-------+
1 row in set (0.00 sec)mysql>
OUT参数示例
mysql> create procedure pro_out_param(out p_out int)-> begin-> select p_out;-> set p_out=9999;-> select p_out;-> end-> $
Query OK, 0 rows affected (0.00 sec)mysql> set @p_out=1;-> call pro_out_param(@p_out);-> $
Query OK, 0 rows affected (0.00 sec)+-------+
| p_out |
+-------+
| NULL |
+-------+
1 row in set (0.00 sec)+-------+
| p_out |
+-------+
| 9999 |
+-------+
1 row in set (0.01 sec)Query OK, 0 rows affected (0.01 sec)# 变量的值已经变了
mysql> select @p_out;-> $
+--------+
| @p_out |
+--------+
| 9999 |
+--------+
1 row in set (0.00 sec)mysql>
INOUT示例