mysql之存储过程
存储过程和函数
存储过程
一组预先编译号的sql语句的集合,理解成批处理语句
类似于java中的方法:
1.提高代码的重用性,
2.简化操作。
3.减少了编译次数和数据库服务器的连接次数,提高了效率。
创建
create or replace procedure 存储过程的名字(参数列表)
begin
存储过程体(一组合法的sql语句)
end
1.注意:参数列表包含三部分:参数的模式,参数名,参数类型
举例:in stuname varchar(20)
参数模式:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。
2.如果存储过程中仅仅只有一句话,begin end 可以省略。
存储过程中的每条sql的结尾要求必须加分号。
存储过程中的结尾可以使用DELIMITER重新设置
语法:
DELIMITER 结束标记。
调用
Call 存储过程名(实参列表);
案例
- 不带参数的存储过程
delimiter $
create procedure mypl1()
begin
insert into admin(username, password)
values ('john1', '0000'),
('john2', '0000'),
('john3', '0000'),
('john4', '0000'),
('john5', '0000');
end $
call mypl1();
2.带in模式参数的存储过程
delimiter $
create procedure myp2(in beautyName varchar(20))
begin
select *
from boys bs
right join beauty b on bs.id = b.boyfriend_id
where b.name = beautyName;
end $
call myp2('柳岩');
delimiter $
create procedure myp3(in username varchar(20),in password varchar(20))
begin
declare ret varchar(20) default '';# 声明变量
select count(1) into ret
from admin a
where a.username=username
and a.password=password;
select ret;
end $
call myp3('john1','0000');
3.带out模式参数的用法
delimiter $
create procedure myp5(in beautyName varchar(20),out boyName varchar(20))
begin
select bo.boyName into boyName
from boys bo
inner join beauty b on bo.id=b.boyfriend_id
where b.name=beautyName;
end $
call myp5('小昭',@bName);
select @bName;
delimiter $
create procedure myp6(in beautyName varchar(20),out boyName varchar(20),out userCp int)
begin
select bs.boyName,bs.userCP into boyName,userCp from boys bs
left join beauty bty on bs.id=bty.boyfriend_id
where bty.name=beautyName;
end $
set @empname = '小昭';
call myp6(@empname,@bName,@userCp);
select @bName,@userCp;
4.创建带inout模式参数的存储过程
1.案例1:传入a和b两个值,最终a和b都翻倍并返回。
delimiter $
create procedure myp8(inout a int,inout b int)
begin
set a=a*2;
set b=b*2;
end $
set @m=20;
set @n=30;
call myp8(@m,@n);
select @m,@n;
-- 传入用户名和密码,插入到admin表中
delimiter $
create procedure test_pro1(in userName varchar(20),in passwor varchar(20))
begin
insert into admin(userName,password) value (userName,passwor);
commit;
end $
call test_pro1('admin','00000');
-- 传入女神编号,返回女神名称和女生电话
delimiter $
create procedure test_pro2(in bid int,out bname varchar(20),out bphone varchar(20))
begin
select name,phone into bname,bphone from beauty b where b.id=bid;
end $
call test_pro2(1,@name,@phone);
select @name,@phone;
-- 传入两个女神生日,返回大小
delimiter $
create procedure test_pro3(in birthDay datetime,in birthDay2 datetime,out ret int)
begin
select datediff(birthDay,birthDay2) into ret;
end $
call test_pro3('1998-1-1','1999-1-1',@ret);
select @ret;
删除存储过程
语法: drop produce 存储过程的名称
drop procedure test_pro2;
查看存储过程
show create procedure test_pro3;
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/15983344.html

浙公网安备 33010602011771号