博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】存储过程(Stored Procedure),SQL语句在执行的时候需要先编译,后执行,而存储过程是为了完成一组特定功能的SQL语句集合,经过编译后存储在数据库中,用户通过调用存储过程的名称并给定参数(如果存在参数)来执行这个SQL语句集合。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。
1.MySQL存储过程的创建
格式:
create procedure 存储过程名字()
(
[in|out|inout] 参数 datatype
)
begin
MySQL 语句;
end;
MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。
例子1:创建一个无参数的存储过程的使用实例
1)选择数据库:
mysql> use test;
2)查看所有已经存在的存储过程:
mysql> show procedure status;
3)创建一个最简单的存储过程:
mysql> create procedure hello() select 'Hello World!';
4)调用存储过程:
mysql> call hello();
5)再次查看存储过程:
mysql> show procedure status;
6)删除存储过程:
mysql> drop procedure hello;
如图:
例子二:创建一个两个参数的存储过程,实现两个数求和功能
完整MySQL命令如下:
mysql> use test;
Database changed
mysql> DELIMITER ;
mysql> create procedure pr_add(a int,b int)
-> begin
-> declare c int;
-> if a is null then
-> set a = 0;
-> end if;
-> if b is null then
-> set b = 0;
-> end if;
-> set c = a + b;
-> select c as sum;
-> end;
mysql> DELIMITER ;
Query OK, 0 rows affected
mysql> call pr_add(10,20);
+-----+
| sum |
+-----+
| 30 |
+-----+
1 row in set
Query OK, 0 rows affected
写存储过程需要注意的几点:
1.调用存储过程的时候,若无参数,也需要加括号"()",如:call hello();
2.MySQL存储过程的参数不能设置默认值,所以在调用MySQL存储过程的时候,不能省略参数,可以用null来代替,如:call pr_add(null,null);
3.存储过程可以有注释:
if a is null then # 这是MySQL的单行注释
...
end if
4.MySQL的存储过程每条语句的末尾,都要加上分号";"
...
declare c int;
...
5.在存储过程中如果包含多条SQL语句,则需要使用begin end 关键字包含,若是单条sql则无需使用begin end 关键字包含
begin
mysql statement 1... ; # 过程体
mysql statement 2... ;
end;
6.参数不能设置默认值。
7.mysql> DELIMITER ;中的DELIMITER是分隔符的意思。MySQL中默认使用分号';'作为分隔符,如果没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符。
8.不能在 MySQL 存储过程中使用 “return” 关键字。
另外,注意:MySQL存储过程的控制语句:
1)变量作用域,定义变量
declare a varchar(30) default 'this is a string';
2)条件语句:if-then -else 语句
...
declare a int default 10;
if a > 5 then
select a;
else
select '5';
end if;
...
3)循环语句:while ... end while
mysql > DELIMITER //
mysql > CREATE PROCEDURE proc4()
-> begin
-> declare var int;
-> set var=0;
-> while var<6 do
-> insert into t values(var);
-> set var=var+1;
-> end while;
-> end;
-> //
mysql > DELIMITER ;
版权归 马富天PHP博客 所有
本文标题:《MySQL存储过程简介及实例》
本文链接地址:http://www.mafutian.net/150.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
评论审核未开启 |