1、存储过程
1)“存储过程和函数”:类似于java中的方法,python中的函数。
2)“使用存储过程的好处”:
① 提高代码的重用性;
② 简化操作;
③ 减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。
注意:每执行一句sql语句,就会连接mysql服务器一次。
3)“存储过程的含义”:一组预先编译好的sQL语句的集合。
2、存储过程使用的相关知识点
1)创建语法
create procedure 存储过程名(参数列表) begin 存储过程体(一组合法有效的sql语句) end -- 如果【存储过程体】仅仅只有一句话,begin和end可以省略,但是不建议省略。
参数列表包含3部分内容:参数模式 参数名 参数类型,例如:in stuname varchar(20)
2)参数模式分类
in:该参数可以作为输入,也就是该参数,需要调用方法传入值。
out:该参数可以作为输出,也就是该参数,可以作为返回值。
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值。
3)delimiter定义存储过程的结束标记
在mysql语句中,由于每一个语句后面必须要;结尾,而存储过程也需要一个符号结尾,为了防止混淆,我们需要在创建存储过程之前,先使用delimiter定义一个存储过程的结束标记。同时,当我们使用delimiter定义了新的结束标记后,只要是没有关闭当前窗口,之后写的sql语句,就都需要用这个新的结束标记,作为sql语句的结束标记。
-- 语法: delimiter 结束标记 -- 表示以$符号作为存储过程的结束符号。 delimiter $
4)存储过程的调用
call 存储过程名(实参列表);
3、空参的存储过程
注意:“存储过程的整个执行过程,最好在CMD窗口中执行”
-- 创建一个存储过程 delimiter $ create procedure myp() begin insert into admin(username,`password`) values ("tom","1111"),("jerry","2222"), ("jalen","3333"),("rose","4444"),("tonny","5555"); end $ -- 调用存储过程 call myp()$ -- 查看结果。 select * from admin$
效果如下:
4、带in模式的存储过程
1)案例一:创建存储过程,实现根据部门编号,查询对应的部门名称。
代码如下:
-- 创建一个存储过程 delimiter $ create procedure myp2(in num int) begin select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno where e.deptno=num; end $ -- 调用存储过程 call myp2(10)$
效果如下:
2)案例二:创建一个存储过程实现,用户是否登陆成功。
代码如下:
-- 创建一个存储过程 delimiter $ create procedure myp3(in username varchar(10),password varchar(10)) begin declare result int; select count(*) into result from admin ad where ad.username=username and ad.password=password; select if(count(*) > 0,"登陆成功","登陆失败") 登陆状态; end $ -- 调用存储过程 call myp3('john','8888');