MySQL存储过程

2018-09-19  本文已影响5人  老衲灬

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 ;
上一篇 下一篇

猜你喜欢

热点阅读