MySQL存储过程。
MySQL从5.0版本开始支持存储过程,从简单意义来说,就是一组SQL语句的集合,从语言的角度就是一组SQL的封装与重用,提高执行效率。个人感觉挺像是java中的方法的,当然肯定没有Java中方法那么强大。
存储过程和函数的区别:
. | 函 数 | 存储过程 |
---|---|---|
参数 | 必须指定返回值,默认IN类型 | IN,OUT,INOUT |
调用方法 | select funtion() | call procedure |
返回值 | 单一对象 | 多个记录集 |
… | … | … |
一。创建存储过程(简单示例)
表信息
index | id | name | course_number | course_name | grade |
---|---|---|---|---|---|
1 | 2005001 | 张三 | 1 | 数学 | 69 |
2 | 2005002 | 李四 | 1 | 数学 | 88 |
3 | 2005003 | 王五 | 1 | 数学 | 100 |
创建存储过程(无参)
功能实现:查询所有。
delimiter @@ //这里是暂时把结束符改成了@@,为了避免和SQL语句冲突。
create procedure demo_test_1()
begin //begin end 是一对,要么都写要么都不写。
select * from student;
end@@
delimiter; //再把结束符改回来。
call demo_test_1 //执行存储过程。
执行结果:
创建存储过程(有参)
存储过程的参数定义是 ( [in | out | inout ] 参数名 参数类型 )
例:
//in 输入参数
create procedure demo( in id int )
//out返回值参数
create procedure demo( out name varchar )
//inout 输入输出参数 能少用就少用
create procedure demo(inout name varchar )
功能实现:根据index查询此index 所有信息。
delimiter @@
create procedure demo_test_2(in student_index int)
begin
select * from student where `index`=student_index;
end@@
delimiter;
call demo_test_2(1)//执行
执行结果:
二。 变量
变量赋值
select 'Hello 优快云' into @csdn;
select @csdn;
@csdn |
---|
Hello 优快云 |
set @csdn1='Hello 优快云';
select @csdn1;
@csdn1 |
---|
Hello 优快云 |
在存储过程中使用变量
功能实现:计算a+b=c 返回c的值
create procedure demo_test_3(in a int ,in b int ,out c int)
set c=a+b;
call demo_test_3(3,5,@c) //执行
select @c as c;
执行结果:
c |
---|
8 |
在存储过程中使用控制语句
功能实现:根据输入的数字判断男女,0是男,1是女
// if-else
delimiter @@
create procedure demo_test_4(in sex int)
begin
declare c varchar(500); //declare 声明局部变量 必须在begin end中
if sex=0 then set c='男';
elseif sex=1 then set c='女';
else set c='妖';
end if;
select c as '性别';
end @@
delimiter;
// case
delimiter @@
create procedure demo_test_4(in sex int)
begin
declare c varchar(500);
case sex
when 0 then set c='男';
when 1 then set c='女';
else set c='其他';
end case;
select c as '性别';
end @@
delimiter;
//执行
call demo_test_4(1);
执行结果:
性别 |
---|
女 |
功能实现:1到1000相加
delimiter @@
create procedure demo_test_5(in num int)
begin
declare i int default 0;
declare j int default 0;
while i<=num do
set j=i+j;
set i=i+1;
end while;
select j as sum;
end @@
delimiter;
//执行
call demo_test_5(1000);
结果:
sum |
---|
500500 |