本文将对于MySQL高级的存储过程主要内容介绍给大家
存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合。可将其视为批处理文件。虽然他们的作用不仅限于批处理
-- 创建存储过程
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 存储过程的参数用在存储过程的定义,共有三种参数类型:
MySQL 中的存储过程类似 java 中的方法。既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。
DECLARE variable_name [,variable_name...]
datatype [DEFAULT value];
declare 用于声明变量;
variable_name 表示变量名称;
datatype 为 MySQL 的数据类型;
default 用于声明默认值;
SET 变量名 = 表达式值 [,variable_name = expression ...]
3)在存储过程中使用变量
use schooldb;-- 使用 schooldb 数据库
-- 创建过程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘处机';
select * from studentinfo where studentname = name;
end;
-- 调用过程
call mypro1();
运行结果如下:
5)流程控制语句
1、 if 条件语句
IF 语句包含多个条件判断,根据结果为 TRUE、FALSE 执行语句,与编程语言中的 if、else if、else 语法类似。
定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数
-- 创建过程
create procedure mypro2(in num int)
begin
if num<0 then -- 条件开始
select '负数';
elseif num=0 then
select '不是正数也不是负数';
else
select '正数';
end if;-- 条件结束
end;
-- 调用过程
call mypro2(-1);
运行结果如下:
2、case 条件语句
定义存储过程,输入一个整数,使用 case 语句判断是正数还是负数
-- 创建过程
create procedure mypro3(in num int)
begin
case -- 条件开始
when num<0 then select '负数';
when num=0 then select '不是正数也不是负数';
else select '正数';
end case; -- 条件结束
end;
-- 调用过程
call mypro3(1);
运行结果如下:
3、定义存储过程,输入一个整数,使用 case 语句判断是 1 还是 2
-- 创建过程
create procedure mypro4(in num int)
begin
case num -- 条件开始
when 1 then select '数值是 1';
when 2 then select '数值是 2';
else select '不是 1 也不是 2';
end case; -- 条件结束
end;
-- 调用过程
call mypro4(3);
运行结果如下:
3、while 循环语句
while 语句的用法和 java 中的 while 循环类似
1) 定义存储过程,使用 while 循环输出 1 到 10 的累加和
-- 创建过程
create procedure mypro5(out sum int)
begin
declare 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;
运行结果如下:
4)、repeat 循环语句
1、repeat 语句的用法和 java 中的 do…while 语句类似,都是先执行循环操作,再判断条件,区别是 repeat 表达式值为 false 时才执行循环操作,直到表达式值为 true 停止。
定义存储过程,使用 repeat 循环输出 1 到 10 的累加和
-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;
运行结果如下:
5、loop 循环语句
循环语句,用来重复执行某些语句。执行过程中可使用 leave 语句或 iterate 跳出循环,也可以嵌套 IF 等判断语句。
1、leave 语句效果相当于 java 中的 break,用来终止循环;
2、iterate 语句效果相当于 java 中的 continue,用来结束本次循环操作,进入下一次循环。
定义存储过程,使用 loop 循环输出 1 到 10 的累加和
-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;
运行结果如下:
注意:代码中的 m loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作
存储过程的管理主要包括:显示过程、显示过程源码、删除过程。比较简单的方式就是利用 navicat 客户端工具进行管理
SHOW PROCEDURE STATUS;
SHOW PROCEDURE status where db = 'schooldb';
SHOW PROCEDURE status where name like '%my%';
SHOW CREATE PROCEDURE mypro1;
drop PROCEDURE mypro1;
以上就是今天要讲的内容,本文仅仅简单介绍了存储过程的使用,希望会对你有帮助。