马富天PHP博客

MySQL存储过程简介及实例

学习笔记 马富天 2016-06-27 21:13:37 25 0

【摘要】存储过程(Stored Procedure),SQL语句在执行的时候需要先编译,后执行,而存储过程是为了完成一组特定功能的SQL语句集合,经过编译后存储在数据库中,用户通过调用存储过程的名称并给定参数(如果存在参数)来执行这个SQL语句集合。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。

1.MySQL存储过程的创建

格式:

  1. create procedure 存储过程名字()
  2. (
  3.     [in|out|inout] 参数 datatype
  4. )
  5. begin
  6. MySQL 语句;
  7. end;

MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。

例子1:创建一个无参数的存储过程的使用实例

1)选择数据库:

  1. mysql> use test;

2)查看所有已经存在的存储过程:

  1. mysql> show procedure status;

3)创建一个最简单的存储过程:

  1. mysql> create procedure hello() select 'Hello World!';

4)调用存储过程:

  1. mysql> call hello();

5)再次查看存储过程:

  1. mysql> show procedure status;

6)删除存储过程:

  1. mysql> drop procedure hello;

如图:

请输入图片名称

例子二:创建一个两个参数的存储过程,实现两个数求和功能

完整MySQL命令如下:

  1. mysql> use test;
  2. Database changed
  3. mysql> DELIMITER ; 
  4. mysql> create procedure pr_add(a int,b int)
  5.     -> begin
  6.     -> declare c int;
  7.     -> if a is null then
  8.     ->    set a = 0;
  9.     -> end if;
  10.     -> if b is null then
  11.     ->    set b = 0;
  12.     -> end if;
  13.     -> set c = a + b;
  14.     -> select c as sum;
  15.     -> end;
  16. mysql> DELIMITER ;     
  17. Query OK, 0 rows affected
  18. mysql> call pr_add(10,20);
  19. +-----+
  20. | sum |
  21. +-----+
  22. |  30 |
  23. +-----+
  24. 1 row in set
  25. Query OK, 0 rows affected
请输入图片名称

写存储过程需要注意的几点:

1.调用存储过程的时候,若无参数,也需要加括号"()",如:call hello();

2.MySQL存储过程的参数不能设置默认值,所以在调用MySQL存储过程的时候,不能省略参数,可以用null来代替,如:call pr_add(null,null);

3.存储过程可以有注释:

  1. if a is null then # 这是MySQL的单行注释
  2. ...
  3. end if

4.MySQL的存储过程每条语句的末尾,都要加上分号";"

  1. ...
  2. declare c int;
  3. ...

5.在存储过程中如果包含多条SQL语句,则需要使用begin end 关键字包含,若是单条sql则无需使用begin end 关键字包含

  1. begin 
  2. mysql statement 1... ; # 过程体
  3. mysql statement 2... ;
  4. end;

6.参数不能设置默认值。

7.mysql> DELIMITER ;中的DELIMITER是分隔符的意思。MySQL中默认使用分号';'作为分隔符,如果没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符。

8.不能在 MySQL 存储过程中使用 “return” 关键字。

另外,注意:MySQL存储过程的控制语句:

1)变量作用域,定义变量

  1. declare a varchar(30) default 'this is a string';

2)条件语句:if-then -else 语句

  1. ...
  2. declare a int default 10;
  3. if a > 5 then 
  4. select a;
  5. else 
  6. select '5';
  7. end if;
  8. ...

3)循环语句:while ... end while

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc4()  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=0;  
  6.      -> while var<6 do  
  7.      -> insert into t values(var);  
  8.      -> set var=var+1;  
  9.      -> end while;  
  10.      -> end;  
  11.      -> //  
  12. mysql > DELIMITER ; 

版权归 马富天PHP博客 所有

本文标题:《MySQL存储过程简介及实例》

本文链接地址:http://www.mafutian.net/150.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

0

0

上一篇《 20个我们一定会用到的MySQL常用命令 》 下一篇《 yii2.0 数据库查询的方法举例 》
分享到:

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码