MySQL学习笔记(10):存储过程

本文介绍了MySQL中的自定义变量,包括用户变量和局部变量,详细讲解了存储过程的创建、调用、删除及参数模式。通过实例展示了如何创建和使用存储过程,包括IN、OUT和INOUT模式,并提供了查看存储过程信息的方法。

一、MySQL中的自定义变量

一、用户变量

(1)声明

方式1:
SET @变量名=值;

方式2:
SET @变量名:=值;

(2)赋值

方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;

方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量 FROM 表;

(3)使用方法

select @变量名;

二、局部变量

(1)声明

declare 变量名 类型 【default 值】;

(2)赋值

方式一:一般用于赋简单的值
SET 变量名=值;
SET 变量名:=值;

方式二:一般用于赋表 中的字段值
SELECT 字段名或表达式 INTO 变量 FROM 表;

(3)使用

select 变量名;

三、用户变量和局部变量的区别

作用域定义位置语法
用户变量当前会话会话的任何地方加@符号,不用指定类型
局部变量定义它的BEGIN END中BEGINEND的第一句话一般不用加@,需要指定类型

存储过程和函数类似于java中的方法
好处:提高代码的重用性,简化操作,提高了效率(减少了编译次数并且减少了和数据库连接的次数)

存储过程
含义:一组预先编译好的sql语句的集合,集结成批处理语句

二、存储过程的创建

(1)语法

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
	方法体
END

类似于方法:

修饰符 返回类型 方法名(参数类型 参数名,...){
	方法体;
}

(2)参数列表的特点

  1. 参数列表包含三部分:参数模式,参数名,参数类型
    eg:IN name VAECHAR(20)

  2. 参数模式

  • IN
    该参数可以作为输入,也就是该参数需要调用方传入值。
  • OUT
    该参数可以作为输入,也就是该参数可以作为返回值。
  • INOUT
    该参数即可以作为输入又可以作为输出(即该参数既需要传入值,又可以返回值)。

(3)注意事项

  1. 若存储过程仅仅只有一句话,BEGIN END可以省略存储过程体(方法体)中的每条sql语句的结尾必须加分号。
  2. 存储过程的结尾可以使用DELIMITER重新设置。例如。
用法:
DELIMITER 新的结束标记

示例:
delimiter $

三、存储过程的与使用

一、存储过程的调用方法

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

二、存储过程的使用

空参列表

(1)举例:插入到admin表中3条记录

(2)举例代码

DELIMITER $
CREATE PROCEDURE myp1()
BEGIN 
	INSERT INTO admin(username,`password`) 
	VALUES('qwe','111'),('asd','222'),('zxc','333');
END $

CALL myp1()$

带IN模式参数的存储过程

(1)举例:根据女神名,查询对应的男神信息

(2)举例代码

DELIMITER $
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20) )
BEGIN
	SELECT bo.* 
	FROM boys bo
	RIGHT JOIN (beauty b) ON bo.id = b.boyfriend_id										//注释
	WHERE b.`name` = beautyName;
END $

CALL myp2('小昭')$

所遇问题: 若beauty b不用括号括起来。这句话在mysql5下执行会有问题,要把联合的表用括号包含起来才行,否则会报错。

(3)运行结果
在这里插入图片描述

带OUT模式参数的存储过程

(1)举例:根据女神名,返回对应的男神名

(2)举例代码

DELIMITER $
CREATE PROCEDURE myp3(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 $

CALL myp3('小昭',@bName)$
SELECT @bName$

(3)运行结果
在这里插入图片描述

带INOUT模式参数的存储过程

(1)举例:传入a和b两个值,最终a和b都翻倍并返回。

(2)举例代码

DELIMITER $
CREATE PROCEDURE myp4(INOUT a INT,INOUT b INT)
BEGIN
	SET a=a*2;
	SET b=b*2;
END $

SET @m=10$	//定义变量m
SET @n=20$	//定义变量n
CALL myp4(@m,@n)$
SELECT @m,@n$

(3)运行结果
在这里插入图片描述

三、存储过程的删除

(1)语法

DROP PROCEDURE 存储过程名;

注: 每次只能删除一个存储过程。

四、查看存储过程的信息

(1)语法

SHOW CREATE PROCEDURE 存储过程名;

(2)运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值