存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
用一张图理解就是:
delimiter $$
CREATE PROCEDURE (
[ [IN |OUT |INOUT ] 参数名 数据类型…])
BEGIN
DECLARE 变量 变量类型
END $$
delimiter ;
说明:
‘[]’内容不是必须的部分
in:表示入参
out:表示出参
inout:表示既入参又是返回值
delimiter:在mysql中‘;’的作用是结束一个SQL语句,但是在存储过程中一组sql语句共同执行,如果使用‘;’那么后面的sql语句将无法同批次执行,因此先将结束符号设置为$$,而后又恢复为‘;’;
存储过程的创建
eg:
delimiter $$
create procedure proc_demo1()
begin
select * from student;
end $$
delimiter ;
-- 带参的存储过程
delimiter $$
create procedure proc_demo2(
in x int, -- in 只入参
out y int, -- out 只出参
inout z int -- inout 出入参
)
begin
set x = x+10;
set y = y+100;
set z = z+1000;
end $$
delimiter ;
call 存储过程名(参数名)
eg:
call proc_demo1()
-- 环境变量 局部环境变量 @xx 全局环境变量@@x
set @a = 1;
set @b = 2;
set @c = 3;
select @a,@b,@c
call proc_demo2(@a,@b,@c)
select @a,@b,@c
select * from information_schema.ROUTINES where routine_schema='库名'
drop procedure 存储过程名
delimiter $$
create procedure proc_stuPage2(
in curpage int,
in sizepage int,
out countsum int,
out pagesum int
)
begin
declare weizhi int;
set weizhi = (curpage-1)*sizepage;
select count(*) from student into countsum;
set pagesum = ceiling( countsum / sizepage );
select * from student limit weizhi, sizepage;
end $$
delimiter ;
调用:
set @a = 2;
set @b = 3;
set @c = 0;
set @d = 0;
call proc_stuPage2(@a,@b,@c,@d)
select @a,@b,@c,@d