MySQL存储过程

存储过程:一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字给出参数来执行它

简而言之,一组预先编译号的SQL语句的集合,理解成批处理语句

如果这样还不理解,我们直接可以理解成类似于java的方法,C中的函数

使用存储过程的好处:
1.提高代码的重用性
2.简化操作
3.减少了编译器次数并且减少了和数据库服务器的连接次数,提高了效率

在我们使用存储过程时,要先理解SQL中的变量定义的方法
具体在上一篇博文有介绍:
MySQL之变量

首先需要学习存储过程的基本语法规则:

一.创建存储过程

语法:

  CREATE PROCEDURE 存储过程名(参数列表)
  BEGIN
         存储过程体(一组合法的SQL语句;
  END [结束标记]

注意(这部分需要重点记忆):

1.参数列表包含三部分:参数模式 参数名 参数类型
参数模式:
IN:该参数可以作为输入,该参数需要调用方传入值
OUT:该参数可以作为输出,也就是该参数可以作为返回值
INOUT:该参数即可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

2.如果存储过程体仅仅只有一句话,BEGIN END可以省略(我们可以把BEGIN END理解成C语言的大括号)

3.存储过程体中的每条SQL语句的结尾要求必须加分号
存储过程的结尾([结束标记])可以使用DELIMITER重新设置
语法:
DELIMITER 结束标记
案例:
DELIMITER // (设置之后’//‘表示原来的’;’)

二.调用

语法:

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

三.删除存储过程

语法:

DROP procedure 存储过程名;

四.查看存储过程的信息

语法:

SHOW CREATE PROCEDURE 存储过程名;

下面结合实例理解:

现在有一张表名为boys的表如下
在这里插入图片描述

案例一(演示空参存储过程):要求创建存储过程stb,调用查询表的全部信息

DELIMITER //    #由于存储过程语句必须以分号结尾,且不代表语句结束,所以我们要对结束标记重命名

CREATE PROCEDURE stb()    #创建存储过程
BEGIN
	SELECT *
	FROM boys;       #语句结尾必须加分号
END //               #一定要有结束标记

DELIMITER ;         #恢复结束标记
CALL stb();         #调用存储过程

案例二(演示带in模式的存储过程):要求创建存储过程intb,插入指定数据,并且查询结果

DELIMITER //
CREATE PROCEDURE intb(IN tName VARCHAR(10),IN tCP INT)      
BEGIN
	INSERT INTO boys(boyName,userCP) VALUES (tName,tCP);    #插入语句,直接使用变量
	SELECT *         #查询插入结果
	FROM boys;
END //
DELIMITER ;
CALL intb('赵丽颖',666);     #直接写上参数

案例三(演示待out模式的存储过程):要求创建存储过程outtb,指定boyName,返回并输出他的userCP的值


DELIMITER //
CREATE PROCEDURE outtb(IN tName VARCHAR(10),OUT tCP INT)
BEGIN
	SELECT userCP INTO tCP               #INTO表示赋值,如果有多个值格式:select a,b into A,B
	FROM boys
	WHERE boyName = tName;
END //
DELIMITER ;
CALL outtb('黄晓明',@TTcp);    #这里使用用户变量不需要定义,可以直接使用,并且用此变量接收返回值
SELECT @TTcp;                  #查询变量

案例四(带有inout模式的存储过程):创建一个存储过程iotb,传入a,b两个值,最终a,b翻10倍返回

DELIMITER //
CREATE PROCEDURE iotb(INOUT ta INT,INOUT tb INT)
BEGIN
	SET ta := ta*10;          #直接给局部变量赋值
	SET tb := tb*10;      
END //
DELIMITER ;
SET @a := 1;         #定义并初始化用户变量的值
SET @b := 2;
CALL iotb(@a,@b);    #使用用户变量传递和接收值
SELECT @a,@b;        #查询用户变量的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值