mysql中怎么创建存储过程?

创建存储过程有两种方式,一种是通过mysql服务器端创建,另外一种是通过SQLyog客户端创建;

存储过程的参数列表

# 参数列表包含三部分  参数模式  参数名  参数类型
#举例   in stuname varchar(20)
# in参数模式:被该模式修饰的参数可以作为输入参数,也就是该参数需要调用的传入值
# out参数模式:被该模式修饰的参数可以作为输出,也就是该参数可以作为存储过程的返回值
# 如果存储过程没有返回值,那么会执行begin和end之间的sql语句,并显示执行结果
# 如果存储过程有返回值,那么也会执行begin和end之间的sql语句,但是不会显示执行结果,而是把执行结果存储到输出参数中

通过mysql服务器创建存储过程

先来看第一种方式,首先进入mysql服务器端窗口,如下图:

在这里插入图片描述

在这里插入图片描述

然后选择一个数据库,我这里选择的是zhaobo数据库,如下图:

在这里插入图片描述

接着使用命令创建一个名字为dd的存储过程,输入参数是学生id,此存储过程的作用是根据输入的学生id,显示学生的地址,创建命令如下:

delimiter$$
create procedure dd(in id varchar(20))
begin
select address from student
where sid=id;
end $$
delimiter ;

在这里插入图片描述

调用存储过程的格式如下:

#call 存储过程名(参数) 结束标志

使用call命令调用存储过程,如下图:

在这里插入图片描述

再来创建一个存储过程ee,此存储过程有两个参数,一个输入参数,另外一个是输出参数,此存储过程的作用是根据学生id查询学生的班级id,此存储过程对应的代码如下:

delimiter $$
create procedure ee(in sid varchar(20),out cid varchar(20))
begin
select student.cid into cid
from student
where student.sid=sid;
end $$

delimiter ;

在这里插入图片描述

在调用带有输出参数的存储过程之前,一定要首先定义一个变量,用来接收存储过程的输出结果,在mysql定义变量的语法如下:

#set @变量名=初始值;
#注意两个关键点,第一是变量名之前一定要加@符号,第二是变量名一定要赋初始值

调用此存储过程,如下图:

在这里插入图片描述

通过SQLyog客户端创建存储过程

如下图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

把一个表中已有的数据复制到另一个表中

比如说现在有两个表,part_tab3表和part_tab4表,这两个表都是有两个字段c1 int 和 id int,区别是现在part_tab3表中根据id进行了hash分区,而part_tab4表中没有进行hash分区;我们现在想要测试一下进行分区和不进行分区的查询效率,所以我们就先在part_tab3中插入了500万条数据(利用存储过程进行插入的),如下图:
在这里插入图片描述

插入完了之后我们使用命令insert into part_tab4 select * from part_tab3;把part_tab3中的500万条数据赋值到part_tab4这个没有分区的表中;
接着我们先select part_part3表的全部数据,看看所用时间为多少,如下图:
在这里插入图片描述

一共是1.291s,接着我们在select一下part_tab4表的全部数据,看看需要多长时间,如下图:
在这里插入图片描述
发现不加分区的话查询全部反而会更快;
接下来我们试一下按照条件查询的话,不加分区和加区分的区别,首先是part_tab3表,如下图:
在这里插入图片描述
接下来是part_tab4表,如下图:
在这里插入图片描述
确实如果是按条件查询的话,加分区了,要快好多倍;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐