1、简介
说明:MySQL执行语句是要先编译,然后再执行的,会浪费很多资源和时 间。
解决:通过存储过程提前封装并编译,后期直接调用传递参数即可
作用:提升性能
2、语法
-> 创建存储过程:
#修改SQL语句结束符号
delimiter //
create procedure 存储过程名称([选项] 参数 类型,...,[选项] 参数n 类型n)
begin
SQL语句等代码
end //
delimiter;
-> 调用存储过程:call 存储过程名称(参数)
-> 删除存储过程:drop procedure 存储过程名称
-> 显示创建的所有存储过程:show procedure status\G
-> 查看存储过程的创建语句:show create procedure 存储过程名称
示例:通过存储过程显示stu表的数据
#修改结束符
delimiter //
#创建存储过程
create procedure p1()
begin
select * from stu;
end //
#修改结束符
delimiter ;
#调用
call p1();
3、全局变量
设置全局变量:set @变量名 = 值;(注:退出MySQL自动销毁)
查看全局变量:select @变量名;
4、局部变量(declare)
定义局部变量:declare 变量名 变量类型 [default 默认值];
局部变量赋值:
#直接给变量值
set 变量名 = 值;
#查询表数据赋给变量
select 字段名1,...,字段名n from 表名 into 变量名1,...,变量名n;
示例:
delimiter //
drop procedure if exists p3;
create procedure p3()
begin
#1.定义局部变量
declare data1 varchar(30);
#2.定义局部变量(给局部变量设置默认值)
declare data2 varchar(30) default 222;
#3.定义局部变量(并设置333)
declare data3 int;
#4.定义局部变量(值来源于其他表)
declare data4 int;
set data3 = 333;
select age from stu where id = 4 into data4;
#结果: null 222 333 18
select data1,data2,data3,data4;
end //
delimiter ;
#调用
call p3();
5、形参修饰符(in、out、inout)
in
:可以传递参数(默认)
out
:不可以传递参数,但是可以输出参数(必须定义变量来接受输出参数)
inout
:既可以传递参数,又可以输出参数
示例:
delimiter //
create procedure p6(num1 int, in num2 int, out num3 int)
begin
#因为num3修饰符是out所以将返回所有代码运行完毕num3的值给变量
set num3 = num1 + num2;
end//
#定义全局变量
set @testReturnVal = 0//
#调用p6存储过程
call p6(1, 1, @testReturnVal)//
select @testReturnVal//
delimiter ;
网友评论