MySQL存储过程(最全最通透)

什么是mysql存储过程,什么时候需要用到存储过程?

简单的说就是用sql语句的方式实现可编程的函数,然后保存到数据库的数据字典中,通常针对需要批量处理或者重复性比较高的业务封装到存储过程中,然后只需调用既可。

一、创建存储过程

首先存储过程开头需要 DELIMITER 【自定义结束符】也可以说是:重置结束符

为什么必须首先加上 DELIMITER //
通常情况下我们是以分号结束,MySQL就会执行该命令,但有时候,不希望MySQL这么做。在可能输入较多的语句,且语句中包含分号。使用DELIMITER // 后当我们碰到自己自定义的结束符,MySQL解释器才执行这语句。

(尝试去读代码才是学习编程的最好的方式

代码实例

DELIMITER //  --重置结束符号
CREATE PROCEDURE select_test()	--声明存储过程:
BEGIN	--BEGIN 开始
SElECT * FROM test;	--中间是放函数体	
END //;	-- END 结束

CALL select_test()	--CALL+过程名 调用存储过程

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

二、查看和删除存储过程

创建了存储过程并不会因为你关了数据库而消失,它会保存到数据库的数据字典中,下次依然可以直接调用

--查看所有存储过程
SHOW PROCEDURE STATUS;	
--查看指定存储过程
SHOW PROCEDURE STATUS WHERE name='select_test';	
--查看指定存储过程的源代码
SHOW CREATE PROCEDURE select_test;

运行结果(查看所有存储过程)
在这里插入图片描述
运行结果(查看指定存储过程)
在这里插入图片描述
运行结果(查看指定存储过程的源代码)
在这里插入图片描述
删除存储过程

--删除存储过程
DROP PROCEDURE select_test;	
--删除后查看该存储过程
SHOW PROCEDURE STATUS WHERE name = 'select_test';

运行结果(删除后)
在这里插入图片描述

三、声明变量、赋值变量和查询变量

DECLARE 【变量名】关键字声明变量

DELIMITER //
CREATE PROCEDURE test()	
BEGIN
--声明一个varchar类型的变量
DECLARE result VARCHAR(2); 
--声明两个int类型的变量
DECLARE x,y int(3);
--给变量定义值需要用set
set x = 666;set y = 888;
--查询变量用SELECT 
SELECT x;
--根据条件查询数据后用 INTO 赋值给result变量
SELECT name INTO result FROM test WHERE name="李四";
--查询result变量结果
SELECT result;
END//

CALL test();

运行结果(有两个,因为查询了两次)
在这里插入图片描述在这里插入图片描述

四、存储过程传参

分别有三个IN、OUT、INOUT

IN——传入值

DELIMITER //
--IN用来定义传递的形参,然后通过调用传递实参来执行函数
CREATE PROCEDURE test2(IN X varchar(255))
BEGIN
SELECT * FROM test WHERE name = X;
END	//

CALL test2('李四');

在这里插入图片描述
OUT——传出值

DELIMITER //
CREATE PROCEDURE test2(IN X varchar(2),OUT Y int)
BEGIN
SELECT salary INTO Y FROM test WHERE name = X;
END	//

--调用存储过程中定义OUT变量用@,
--就可以使用定义后的变量
CALL test2('李四',@Y);	
--将存储过程里的值给了Y后,定义变量后就可以使用该变量
SELECT @Y

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

INOUT——IN和OUT的组合,可传入又传出

DELIMITER //
CREATE PROCEDURE test3(INOUT X int,IN Y int)
BEGIN
set X = X + Y;
END	//

set @X = 10;
CALL test3(@X,10);
SELECT @X;

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

最后
除了存储过程还有一个是跟存储过程很相似的自定义函数,但是它们是有区别的,下回就讲讲吧

我的公众号和CSDN账号,名字也都是:一颗剽悍的种子,编程相关博文目前都只在CSDN发布,并没有在其他平台发布,最近我看到我的几篇原创博文被其他人抄袭到其他网站,标题名和内容一模一样,虽然目前我的博文还不多,但是我为这种行为感到可耻,同时希望大家请勿抄袭,支持原创,共同维护这个社区。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值