首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL(存储过程)

MySQL(存储过程)

作者头像
全栈开发日记
发布2022-05-12 21:13:35
发布2022-05-12 21:13:35
14.2K0
举报
文章被收录于专栏:全栈开发日记全栈开发日记

目录:

存储过程创建 概念 优点 创建 存储过程调用 存储过程演示 删除存储过程 查看存储过程 修改存储过程

存储过程创建

存储过程的概念

存储过程是一组已经预先编译好的SQL语句的集合,可以理解为批处理语句(增加流程控制语句),一般在复杂的业务逻辑中才会使用存储过程。

存储过程的优点

① 提供了代码的可重用性。

② 简化了数据库操作,讲业务逻辑的细节隐藏在存储过程中。

③ 减少了编译次数,减少了网络IO次数,从而提高操作效率。

存储过程的创建

语法:

代码语言:javascript
复制
delimiter $
create procedure 存储过程的名称(参数列表)

begin
局部变量的定义
多条SQL语句
流程控制语句
end;$

注意:如果存储过程中只有一条SQL语句,可以省略begin...end。

参数列表:

in:声明该参数是一个输入型参数,(类似于Java中的形参)。

out:声明该参数为一个输出型参数,(类似于Java的返回值),在一个存储过程中可以定义多个out类型的参数。

inout:声明该参数既可以为输入型参数,也可以为输出型参数。

存储过程调用

语法:

代码语言:javascript
复制
call 存储过程名称(实参列表);

注意:实参列表中包含有输出类型的参数

代码实例:

代码语言:javascript
复制
call pro_insert();

当调用这个存储过程,会把创建成功的创建过程中的语句执行一遍。

存储过程演示

无参的存储过程

代码实例:

向b_user表中插入2条数据

代码语言:javascript
复制
#创建存储过程
delimiter $
create procedure pro_insert()
begin
insert into b_user(user_name,sex) values('存储过程1','男');
insert into b_user(user_name,sex) values('存储过程2','女');
end;$

#调用存储过程
call pro_insert();

创建带有in模式参数的存储过程

代码实例:

用于向b_user表中插入2条数据,性别由客户输入

代码语言:javascript
复制
#创建存储过程
delimiter $
create procedure pro_insert2(in sex char(1))
begin
insert into b_user(name,sex) values('存储过程a',sex);
insert into b_user(name,sex) values('存储过程b',sex);
end;$

#调用存储过程
call pro_insert2('男');

注意:值列表中写字段名称意为让用户来赋值,在后面调用存储过程时需要有该参数值。

创建多个带有in参数的存储过程

代码实例:

用于向b_user表中插入2条数据,用户名和性别由客户输入

代码语言:javascript
复制
#创建存储过程
delimiter $
create procedure pro_insert3(in name varchar(10),in sex varchar(20))
begin
insert into b_user(name,sex) values(name,sex);
insert into b_user(name,sex) values(name,sex);
end;$

#调用存储过程
call pro_insert3('uname','男');

带in,out参数的存储过程

判断用户登录,如果用户名和密码输入正确登录成功,否则登录失败。

代码语言:javascript
复制
#创建存储过程
delimiter $
create procedure pro_login(
in name varname(20),
in pwd varchar(20),
out result varchar(20)
)
begin 
-- 用于存放查询总行数-- 用于存放查询总行数
declare total int default 0;

-- 讲查询结果赋值给total局部变量-- 讲查询结果赋值给total局部变量
select count(*) 
from b_user a 
where a.name=name 
and a.pwd=pwd;

set result:=if(total=1,'登录成功','登录失败');

end;$

#存储过程如何执行
-- 使用自定义变量
set @result:='';
call pro_login('李四','123',@result);
select @result;

删除存储过程

语法:

代码语言:javascript
复制
drop procedure 存储过程名称;

查看存储过程

语法:

代码语言:javascript
复制
show create procedure 存储过程名称;

修改存储过程

目前,MySQL还不提供对已存在的存储过程的代码修改。

如果要修改可以先删除再进行创建。

代码语言:javascript
复制
DROP -- 删除 
CREATE -- 创建
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 存储过程的概念
  • 存储过程的优点
  • 存储过程的创建
  • 无参的存储过程
  • 创建带有in模式参数的存储过程
  • 创建多个带有in参数的存储过程
  • 带in,out参数的存储过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档