什么是mysql存储过程_mysql 存储过程

存储过程

1.什么是存储过程

一组可编程函数,是为了满足特定功能的SQL语句集

存储过程就是具有名字的一段代码,用来完成个特定的功能

创建的存储过程保存在数据库的数据字典中

2.为什么要用存储过程

将重复性很高的操作,封装到一个存储过程中,简化了对这些SQL的调用

批量处理

统一接口,确保数据安全

相对于Oracle来说,Mysql的存储过程相对功能较弱,使用较少

3.存储过程的创建和调用

1. delimiter$$

他与存储过程无关

delimiter$$ 将标准分隔符 - 分号 (😉 更改为 两个 $

将存储过程作为整体,而不是一次解释每条语句

告诉mysql解释器,该段命令已经结束了。默认情况下,delimiter 是分号,在命令行客户端中,如果有一行命令以分号结束,回车后,mysql将会执行该命令。如果不希望这样,就可以 delimiter$$ ,这样只有在 $$出现后,mysql解释器才会执行 这段语句

0b7d92b916ba1074cf21c4ecb8fd6a87.png

2.创建和调用存储过程

# 创建存储过程

CREATE PROCEDURE 名称()

BEGIN

语句

END$$

# 调用存储过程

CALL 名称()

如图:

c3205060580c33e40e1e6bad579c8440.png

右击鼠标 运行已选择的

然后运行CALL show_content() 这句,就会得到执行结果。

将查询窗口关闭,重新打开一个新的查询窗口,可以直接使用 CALL show_content ,即可执行得到结果

4602928fc27416f0a19e4a102537ecba.png

3.查看存储过程

查看所有存储过程: SHOW PROCEDURE STATUS;

查看指定数据库中的存储过程: SHOW PROCEDURE STATUS WHERE DB = 'publiccms';

353e1100578f65ae454e2899ccd77f05.png

查看指定存储过程源码 : SHOW CREATE PROCEDURE show_emp;

删除指定存储过程: DROP PROCEDURE show_emp;

4.存储过程变量

delimiter $$

CREATE PROCEDURE test()

BEGIN

-- 声明变量,默认为空

DECLARE res VARCHAR(255) DEFAULT '';

DELETE x,y int DEFAULT 0 -- 声明两个变量,类型为int ,默认为 0

-- 赋值 set 方式

set x = 3;

set y = 4;

DECLARE avgRes DOUBLE DEFAULT 0;

-- 另一种赋值方式 into 方式

select avg(salary) into avgRes from emp

end$$

-- 什么的变量,如 x,y等,只能在 begin end 之间有效

5.存储过程参数传递

in

-- 根据传入的名称,获取对应的信息

delimiter $$

create PROCEDURE getName(in name VARCHAR(255))

BEGIN

SELECT * FROM emp where ename = name;

end$$

delimiter ;

CALL getName('鲁班')

0d9c43d8e4e20025a37f795dc48359de.png

out

-- 传入姓名,得出薪水

delimiter $$

create procedure getSalary(in name varchar(255),out money int)

BEGIN

select salary into money from emp where ename = name;

end$$

delimiter ;

CALL getSalary('李白',@s) -- @s 代表返回的数

select @s; -- 也可以写为 select @s from DUAL

-- DUAL 是一个虚拟的表

e8781f8371867a96a27a27796864d96e.png

inout 既是输入,又是输出

delimiter $$

create procedure test(inout num int,in inc int) -- inout ,既是输入,也是输出

BEGIN

set num = num + inc;

end$$

delimiter ;

set @num1 = 20; -- @ 代表地址传递

CALL test(@num1, 10);

select @num1;

18c58451313c3023f37bb0ee087076bb.png

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值