[MYSQL] 存储过程

本文详细介绍了MySQL中的存储过程,包括创建、调用、查看、删除等操作,并通过实例展示了如何创建带不同参数模式的存储过程。存储过程提高了代码重用性和效率,适合批量操作。同时,文章对比了存储过程与函数的区别,强调了存储过程在批量更新和插入场景中的优势。
摘要由CSDN通过智能技术生成

含义:一组预先编译好的SQL语句的集合,理解成批处理语句

作用:
① 提高代码的重用性
② 简化操作
③ 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

一、创建

create procedure 存储过程名(参数模式 参数名 参数类型)
begin
        存储过程体
end

注意:
① 参数模式:in、out、inout,其中in可以省略
② 如果存储过程体仅仅只有一句话,begin end可以省略
③ 存储过程体的每一条sql语句都需要用分号结尾
存储过程的结尾可以使用 delimiter 重新设置

语法:

delimiter 结束标记

例:

delimiter $
--注意:这个是设置结尾,不要加分号!如果加了分号结尾将用$;结尾
--且设置了结尾为$了之后,以后的查询语句将用$结尾

二、调用

call 存储过程名(实参列表)

① 调用in模式的参数:call sp1(‘值’);
② 调用out模式的参数:set @name; call sp1(@name);select @name;
③ 调用inout模式的参数:set @name=值; call sp1(@name); select @name;

例1:插入到studenrt表中五条记录

CREATE PROCEDURE stone()
BEGIN
    INSERT INTO student(stuname,`password`)
    VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
END $

-- 调用
CALL stone()$

例2:创建带in模式参数的存储过程

创建存储过程实现 根据beauty表中的女生名字,查询boys表中对应的男朋友信息,其中boys表中的id与beauty表中的boyfriend_id相呼应。

CREATE PROCEDURE sttwo(IN beautyName VARCHAR(20))
BEGIN
    SELECT bo.*
    FROM boys bo
    RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
    WHERE b.name=beautyName;   --beautyName为传过来的参数
END $

--调用
CALL sttwo('lily')$

例3:创建out 模式参数的存储过程
根据beauty表输入的女生名,返回boys表中对应的男朋友名,其中boys表中的id与beauty表中的boyfriend_id相呼应。

REATE PROCEDURE stthree(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
    SELECT bo.boyname INTO boyname  -- 查到的男生名字放进boyName,由boyName返回
    FROM boys bo 
    RIGHT JOIN beauty b ON b.boyfriend_id = bo.id
    WHERE b.name=beautyName ;
END $

例4:创建带inout模式参数的存储过程
#案例1:传入a和b两个值,最终a和b都翻倍并返回
 

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

--调用
SET @m=10$
SET @n=20$
CALL myp8(@m,@n)$
SELECT @m,@n$

三、查看

show create procedure 存储过程名;

四、删除

drop procedure 存储过程名;

注意:只能一个一个的删除,不能一次性删除两个和或两个以上。

如:

DROP PROCEDURE stone;--√
DROP PROCEDURE sttwo,stthree;--×

五、函数与存储过程的区别:

存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1 个返回,适合做处理数据后返回一个结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值