什么是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发布,并没有在其他平台发布,最近我看到我的几篇原创博文被其他人抄袭到其他网站,标题名和内容一模一样,虽然目前我的博文还不多,但是我为这种行为感到可耻,同时希望大家请勿抄袭,支持原创,共同维护这个社区。