mysql学习笔记(6)_存储过程

原本觉得掌握最基本的语法就行了,但发现老师最近又提到了存储过程,我觉得有必要学习整理一下,以下是我的简单笔记

存储过程的含义以及优点

  • 含义:一组预先编译号的sql语句的集合,理解成批处理语句
  • 优点:
    • 1.提高代码的重用性
    • 2.简化操作
    • 3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

存储过程的创建语法

create procedure 存储过程名(参数列表)
	begin
		存储过程体(一般合法的SQL语句)
	end

参数列表包含三个部分(参数模式,参数名称,参数类型
参数列表举例:IN stuname varchar(20)
参数模式:

  • IN :该参数库作为输入,也就是该参数需要调用方法传入值(但不能返回值)
  • OUT:该参数可以作为输出,也就是该参数可以作为返回值(但不能传入值)
  • INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

注意:
如果存储过程只有一句话,BEGIN END可以省略
存储过程体中的每条SQL语句的结尾要求必须加分号
存储过程体的结尾可以使用DELIMITER重新设置
语法:DELIMITER 结束标记
案例:DELIMITER $

存储过程的调用语法

CALL 存储过程名(实参列表);

存储过程的举例

1.空参的存储过程 (也就是没有参数)

例:向student表中插入4条数据 。
先创建一个student表

create table student(
	id int auto_increment,//学号
    name varchar(20),//名字
    score double,//分数
    primary key(id)
);

创建相应的存储过程

delimiter $
create procedure myp1()
begin
		insert into student(name,score) 
        values ('jack',89),('sam',93),('bobi',100),('alen',85);
end $

创建好后我们需要调用这个存储过程就能实现插入操作

call myp1();

然后我们查看student表就可以发现成功插入了4条数据
mysql学习笔记(6)_存储过程_第1张图片

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

例1:通过学生id,查找对应分数(我这里就简单的单表查询进行演示一下)

delimiter $
create procedure myp02(IN id int)
begin 
	select s.score
    from student s
    where s.id=id;
end $

调用该存储过程

call myp02(1);

这里传入的id为1,即返回jack的分数
在这里插入图片描述
例2.案例1:输入id和学生名,判断该学生是否存在

delimiter $
create procedure myp004(IN id int,IN name varchar(20)) 
begin
    declare result int default 0;#声明变量和默认值 
    
	select count(*) into result#赋值 
    from student s
    where s.id = id
    and s.name = name;
    
    select if(result>0,'存在学生','不存在学生') '存在与否' ;
end $

调用过程

call myp004(1,'哈哈');

则输出如下:
在这里插入图片描述

2.创建带out模式参数的存储过程

准备:先创建一个课程表

create table class(
	id int primary key auto_increment,
    cname varchar(20)
);

我向其中插入了以下4条数据
mysql学习笔记(6)_存储过程_第2张图片
例:通过学生id,查找对应课程

delimiter $
create procedure myp5(IN sid int,out cname varchar(20))
begin
	select c.cname into cname
    from class c
    inner join student s on s.id = c.id
    where s.id = sid;
end $

调用过程

call myp5(1,@Name);//这里其实就是将更具id查到的课程名赋值给变量@Name
select @Name;//我们再查询这个变量就可以得到这个课程名

查询如下:
在这里插入图片描述

2.创建带inout模式参数的存储过程

例:传入a和b两个值,最终a和b都翻倍并返回

delimiter $
create procedure myp6(inout a int, inout b int)
begin
	set a=a*2;
    set b=b*2;
end
$

调用过程

set @a=2;//设置变量@a=2
set @b=4;//设置变量@b=4


call myp6(@a,@b);//将两个变量作为参数传入该存储过程

select @a,@b;//然后我们再查看变量@a和@b的值

查询如下:
在这里插入图片描述

删除存储过程

语法:drop procedure 存储过程名;
注:一次只能删除一个

查看存储过程的信息

语法:show create procedure 存储过程名;
例:show create procedure myp1;
示例如下:
mysql学习笔记(6)_存储过程_第3张图片

此处只是列举了最基础的例子,很多情况可能没有涉及到,希望各位大佬能够提出自己的见解,共同学习,共同进步!

你可能感兴趣的:(mysql,mysql,存储过程)