MySQL和数据库系列文章目录
【MySQL和数据库】MySQL & database 第一章:数据库的安装与卸载
【MySQL和数据库】MySQL & database 第二章:数据库与MySQL的基本概述
【MySQL和数据库】MySQL & database 第三章:DQL学习(主要是记录的查询)
【MySQL和数据库】MySQL & database 第四章:DML学习(主要是对记录的增删改)
【MySQL和数据库】MySQL & database 第五章:DDL学习(主要是对库、表、字段的增删改)
【MySQL和数据库】MySQL & database 第六章:TCL学习(主要是针对事务的控制)
【MySQL和数据库】MySQL & database 第七章:视图的学习
【MySQL和数据库】MySQL & database 第八章:MySQL中的变量
【MySQL和数据库】MySQL & database 第九章:存储过程的学习
【MySQL和数据库】MySQL & database 第十章:函数的学习
【MySQL和数据库】MySQL & database 第十一章:流程控制结构
存储过程
-
含义:一组预先编译好的SQL语句的集合,理解成成批处理语句;
-
特点:
- 提高代码的重用性;
- 简化操作;
- 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率;
-
创建语法
create procedure 存储过程名(参数列表) begin 存储过程体(一组合法的sql语句) end
-
参数列表包含三部分:参数模式、参数名、参数类型
举例: in stuname varchar(20); 参数模式: in:该参数作为输入,需要调用方法入值; out:该参数作为输出,作为返回值; inout:既可以作为输入也可以作为输出,既是传入值也是返回值;
-
如果存储过程体只有一条语句,begin 和 end 可以省略;
-
存储过程体中的每条 sql 语句的结尾要求必须加分号;
-
存储过程的结尾可以使用 delimiter 重新设置;
语法: delimiter 结束标记 案例: delimiter $
-
-
调用语法
call 存储过程名(实参列表);
-
案例1:创建空实参列表的存储过程
delimiter $ create procedure myq() begin 一组sql语句; end $ call myq() $
-
案例2:创建单个输入实参的存储过程
delimiter $ create procedure myq2(in beautyName varchar(20)) begin select bo.* from boys bo right beauty b on bo.id = b.bofrinend_id where b,name = beautyName; end $ call myq2('Alice') $
-
案例3:创建多个输入实参的存储过程
delimiter $ create procedure myq3(in userName varchar(20), in password varchar(20)) begin declare result int default 0; select count(*) into result from admin where admin.userName = userName and admin.password = password; select if(result > 0, 'succeed', 'fault'); end $ call myq3('Mike', '123456') $
-
案例4:创建单个返回参数的存储过程
delimiter $ create procedure myq4(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 $ set @bName $ call myq4('小昭', @bName) $ select @bName $
-
案例5:创建多个返回参数的存储过程
delimiter $ create procedure myq5(in beautyName varchar(20), out boyName varchar(20), out userCP int) begin select bo.boyName, bo.userCP into boyName, userCP from boys bo inner join beauty b on bo.id = b.boyfriend_id where b.name = beautyName; end $ call myq5('小昭', @bName, @usercp) $ select @bName, @usercp $
-
案例6:创建带有inout 模式参数的存储过程
delimiter $ create procedure myq6(inout a int, inout b int) begin set a = a * 2; set b = b * 2; end $ set @m = 10 $ set @n = 20 $ call myq6(@m, @n) $ select @m, @n $
-
删除语法
drop procedure 存储过程名; #一次只能删除一个存储过程;
-
查看语法
show create procedure 存储过程名; #只能进行查看,无法对存储过程作出修改;