时间:2021-05-24
MySQL5.0 版本开始支持存储过程。
大多数 SQL 语句都是针对一个或多个表的单条语句。并非所有的操作都那么简单。经常会有一个完整的操作需要多条语句才能完成。
存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合。可将其视为批处理文件。虽然他们的作用不仅限于批处理。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
创建存储过程,代码如下所示:
-- 创建存储过程 create procedure mypro(in a int,in b int,out sum int) begin set sum = a+b; end;运行结果如下
也可以在 Navicat 客户端“函数”节点下查看过程,如下图所示:
调用存储过程,代码如下所示:
call mypro(1,2,@s);-- 调用存储过程 select @s;-- 显示过程输出结果运行结果
MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:
存储过程根据参数可分为四种类别:
1).没有参数的过程;
2).只有输入参数的过程;
3).只有输出参数的过程;
4).包含输入和输出参数的过程。
MySQL 中的存储过程类似 java 中的方法。
既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。
变量定义
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];declare用于声明变量;
variable_name表示变量名称;
datatype为 MySQL 的数据类型;
default用于声明默认值;
例如:
declare name varchar(20) default ‘jack'。在存储过程中使用变量,代码如下所示
use schooldb;-- 使用 schooldb 数据库-- 创建过程create procedure mypro1()begindeclare name varchar(20);set name = '丘处机';select * from studentinfo where studentname = name;end;-- 调用过程call mypro1();运行结果
IF 语句包含多个条件判断,根据结果为 TRUE、FALSE执行语句,与编程语言中的 if、else if、else 语法类似。
定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:
-- 创建过程create procedure mypro2(in num int)beginif num<0 then -- 条件开始select '负数';elseif num=0 thenselect '不是正数也不是负数';elseselect '正数';end if;-- 条件结束end;-- 调用过程call mypro2(-1);运行结果
case是另一个条件判断的语句,类似于编程语言中的 choose、when语法。MySQL 中的 case语句有两种语法
格式。
定义存储过程,输入一个整数,使用 case 语句判断是正数还是负数,代码如下所示:
-- 创建过程create procedure mypro3(in num int)begincase -- 条件开始when num<0 then select '负数';when num=0 then select '不是正数也不是负数';else select '正数';end case; -- 条件结束end;-- 调用过程call mypro3(1);运行结果
定义存储过程,输入一个整数,使用 case 语句判断是 1 还是 2,代码如下所示:
-- 创建过程create procedure mypro4(in num int)begincase num -- 条件开始when 1 then select '数值是 1';when 2 then select '数值是 2';else select '不是 1 也不是 2';end case; -- 条件结束end;-- 调用过程call mypro4(3);运行结果
两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。
while语句的用法和 java中的 while循环类似。
定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程create procedure mypro5(out sum int)begindeclare num int default 0;set sum = 0;while num<10 do -- 循环开始set num = num+1;set sum = sum+num;end while; -- 循环结束end;-- 调用过程call mypro5(@sum);-- 查询变量值select @sum;运行结果
repeat语句的用法和 java中的 do…while 语句类似,都是先执行循环操作,再判断条件,区别是 repeat表达
式值为 false时才执行循环操作,直到表达式值为 true停止。
定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程create procedure mypro6(out sum int)begindeclare num int default 0;set sum = 0;repeat-- 循环开始set num = num+1;set sum = sum+num;until num>=10end repeat; -- 循环结束end;-- 调用过程call mypro6(@sum);-- 查询变量值select @sum;运行结果
循环语句,用来重复执行某些语句。
执行过程中可使用 leave语句或 iterate 跳出循环,也可以嵌套 IF等判断语句。
leave语句效果相当于 java 中的 break,用来终止循环;
iterate语句效果相当于 java 中的 continue,用来结束本次循环操作,进入下一次循环。
定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:
-- 创建过程create procedure mypro7(out sum int)begindeclare num int default 0;set sum = 0;loop_sum:loop-- 循环开始set num = num+1;set sum = sum+num;if num>=10 thenleave loop_sum;end if;end loop loop_sum; -- 循环结束end;-- 调用过程call mypro7(@sum);-- 查询变量值select @sum;运行结果
代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。
存储过程的管理主要包括:显示过程、显示过程源码、删除过程。
比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:
显示存储过程
SHOW PROCEDURE STATUS;显示特定数据库的存储过程
SHOW PROCEDURE status where db = 'schooldb';显示特定模式的存储过程,要求显示名称中包含“my”的存储过程
SHOW PROCEDURE status where name like '%my%';显示存储过程“mypro1”的源码
SHOW CREATE PROCEDURE mypro1;删除存储过程“mypro1”
drop PROCEDURE mypro1;到此这篇关于MySQL存储过程的创建、调用与管理的文章就介绍到这了,更多相关MySQL存储过程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了MySQL实现创建存储过程并循环添加记录的方法。分享给大家供大家参考,具体如下:先创建,然后调用:--创建存储过程DELIMITER;//crea
本文实例分析了php调用mysql存储过程的方法。分享给大家供大家参考。具体分析如下:Mysql存储过程创建语法,代码如下:CREATEPROCEDURE和CR
MySQL存储过程14.1.1创建存储过程MySQL中,创建存储过程的基本形式如下:CREATEPROCEDUREsp_name([proc_parameter
Java调用Oracle存储过程详解步骤:1、编写Oracle存储过程2、编写数据库获取连接工具类3、编写简单应用调用存储过程实现:1、Oracle存储过程:/
本文实例讲述了mysql存储过程原理与用法。分享给大家供大家参考,具体如下:本文内容:什么是存储过程存储过程的创建存储过程的使用查看存储过程修改存储过程删除存储