开发者学堂课程【MySQL 实操课程:MySQL 之存储过程】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/717/detail/12811
MySQL 之存储过程
目录:
一、MySQL 创建存储过程
二、MySQL 调用创建的存储过程
三、总结
一、MySQL 创存储过程
1、存储过程和函数都是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,提高数据处理的效率。
简单的理解:存储过程相当于加工处理程序。从数据库里面提取数据进行加工,然后又写入到数据库里的过程。
在没有经过存储过程之前,数据的加工和处理是交给应用开发人员在应用代码里处理,会增加应用和数据库之间的数据传输,降低数据处理的效率。
所以,存储过程是可以从数据库里取出来,处理完后写回去。
2、创建一个存储过程,根据部门门编号查询员工表对应员工数量。
(1) 打开 DMS - 数据管理服务页面下的命令窗口,编辑:
delimiter $$
CREATE PROCEDURE‘get_emp_number_proc ’(in dept_no int,out emp_number int)
READS SQL DATA
begin
Select count(1) into dept_number from emp where deptno=dept_no;
end
$$
这里是创建 PROCEDURE 的过程。不仅要告诉部门的编号的参数和类型,还需要指定为输入的参数 in dept_no int,输出的参数 out emp_number int。输入和输出在存储过程中定义好。in 代表输入,out 代表输出。最终的结果会写入到emp_number 里面。
执行看结果。提示执行失败。
(2) 结果提示没有定义emp_number。程序段写错,select count(1) into dept_number 要改为 select count(1) into emp_number。
执行。结果提示执行成功。
mysql>delimiter $$
Sql 分隔符设置为:[$$]
mysql>CREATE PROCEDURE‘get_emp_number_proc’(in dept_no int,out emp_number int)
READS SQL DATA
begin
select count(1) into emp_number from emp where deptno=dept_no;
end
执行成功,耗时: 8 ms
这时,可以在页面左侧的可编程对象栏目里,刷新,点开存储过程,看到get_emp_number_proc 的存储过程文件。可直接点击它执行存储过程。
二、MySQL 调用创建的存储过程
怎么调用 get_emp_number_proc 的存储过程文件?
1、在可编程对象栏目里的存储过程文件下,右击 get_emp_number_proc 文件,选择 执行(存储过程),弹出图中下页面:
然后填入参数值,点击开始执行。在页面最下边可以看到执行结果。
2、在命令窗口输入程序段调用存储过程
打开命令窗口,定义变量:
set @dept_no= 1;
set @emp_number= 0;
call get_dept_number_proc(@dept_no,@emp_ number);
select @emp_number;
点击执行。提示错误。call get_dept_number_proc应改为call get_emp_number_proc
再执行,提示执行成功。
右击 get_emp_number_proc 文件,选择 调用(存储过程)。看到界面中,这个存储过程的值写入到 emp_number 中。
再打开命令窗口重新执行定义变量程序段,看到结果为
执行成功,耗时: 5 ms .
semysql>set @emp_number =0;
执行成功,耗时: 5 ms .
semysql>call get_dept_number_proc(@dept_no,@emp_ number);
执行成功,耗时: 5 ms .
semysql>select @emp_number;
+-------------------------+
| @emp_ number |
+-------------------------+
| 3 |
+-------------------------+
返回行数: [1],耗时: 5 ms .
三、总结
存储过程和函数,实际上他们的目标都是为了解决应用与数据库之间的网络开销。通过存储过程和函数可以减少数据库开发人员,特别是应用程序开发人员的工作量。而且,存储过程可以增强数据安全的访问机制,可以设计只有某些数据库的用户才具备某些存储过程或者函数执行的权限。