mysql 存储过程

存储过程

1.什么是存储过程

  • 一组可编程函数,是为了满足特定功能的SQL语句集
  • 存储过程就是具有名字的一段代码,用来完成个特定的功能
  • 创建的存储过程保存在数据库的数据字典中

2.为什么要用存储过程

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

  • 批量处理

  • 统一接口,确保数据安全

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

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

1. delimiter$$

  • 他与存储过程无关

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

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

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



    emp表

2.创建和调用存储过程

# 创建存储过程
CREATE 	PROCEDURE 名称()
BEGIN
语句
END$$

# 调用存储过程
CALL 名称()

如图:

右击鼠标 运行已选择的

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

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

3.查看存储过程

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

  • 查看指定存储过程源码 : 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('鲁班')	


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 是一个虚拟的表


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;

posted @ 2018-07-26 13:59  郭东东郭  阅读(1268)  评论(0编辑  收藏  举报