文章目录
什么是存储过程
- 一组可编程的函数, 是为了完成特定功能的SQL语句集
- 存储过程就是具有名字的一段代码, 用来完成个特定的功能。
- 创建的存储过程保存在数据库的数据字典中
为什么要用存储过程
- 将重复性很高的一些操作, 封装到-个存储过程中, 简化了对这些SQL的调用
- 批量处理数据
- 统一接口,确保数据的安全
- 相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。
存储过程的创建和调用
DELIMITER
讲存储过程的创建和调用之前,我们要先了解一下DELIMITER。
- 它与存储过程语法无关
- DELIMITER语将标准分隔符-分号(:)更改为其他符号,比如美元符: “ $ $ ”
这东西有什么用?
因为我们想将存储过程作为整体传递给服务器,而不是让mysq|工具一次解释每个语询
告诉mysql解释器,该段命令是否已经结束了,mysq|是否可以执行了。默认情况下delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束, 那么回车后,mysq|将会执行该命令。但有时候,不希望MySQL这么做。在为可能输入较多的语句,且语句中包含有分号,使用"delimiter $ $ ",这样只有当$$出现之后,mysq|解释器才会执行这段语句。
简单来说,每输入一条mysql语句需要输入分号“;”才能执行,现在我们将分号改为两个美元符。
创建存储过程
delimiter $$
CREATE PROCEDURE 存储过程名()
BEGIN
语句
END$$
举个栗子
假设我们有学生表一张
创建学生表存储过程
delimiter $$
CREATE PROCEDURE show_stu()
BEGIN
SELECT * FROM tu;
END$$
delimiter ;
调用存储过程
call名称() ;
举个栗子
调用上面创建好的存储过程
call show_stu() ;
运行结果
查看存储过程
查看所有存储过程
SHOW PROCEDURE STATUS;
查看指定数据库中的存储过程
SHOW PROCEDURE STATUS WHERE db = '数据库名';
查看指定存储过程源代码
SHOW CREATE PROCEDURE 存储过程名 ;
注意这里的存储过程名后面不用加()
删除存储过程
drop PROCEDURE 存储过程名;
存储过程变量
-
在存储过程中声明一个变量
DECLARE变量名数据类型(大小) DEFAULT默认值; -
声明变量:使用DECLARE语句
可以声明一个名为total sale的变量,数据类型为INT,默认值为0
DECLARE total sale INT DEFAULT 0;
- 声明共享相同数据类型的两个或多个变量
DECLAREx, y INT DEFAULT 0;
- 分配变量值
1.要为变量分配一一个值,可以使用SET语句
SET 变量名= 10;
2.使用SELECT INTO语将查询的结果分配给一个变量
SELECT COUNT(*) INTO 变量名 FROM 表名
- 变量的范围
如果在存储过程中声明一个变量,那么当达到存储过程的END语句时,它将超出范围,因此在其它代码块中无法访问
存储过程参数传递:三种类型
- IN:代表输入,你的参数要传到存过过程的过程里面去:如图,给一个名字,可以查询这个人的所有信息。
- OUT:代表往外输出。
给一个名字,可以查询这个人薪资
- INOUT:既能输入一个值又能传出来一个值