MySQL存储过程

存储过程简介

●从 5.0 版本才开始支持
是一组为了完成特定功能的SQL语句集合
比传统SQL速度更快、执行效率更高

存储过程的优点
执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
SQL语句加上控制语句的集合,灵活性高
在服务器端存储,客户端调用时,降低网络负载
可多次重复调用,可随时修稿,不影响客户端调用
可完成所有的数据库操作,也可控制数据库的信息访问权

●为什么要用存储过程?
1.减轻网络负载;2.增加安全性

创建存储过程

使用CREATE PROCEDURE语句创建存储过程
创建存储过程的语法结构

CREATE PROCEDURE <过程名> ([过程参数[,…]])<过程体> //尽量避免与内置的函数或字段重名 <过程体>:mysql语句
[过程参数[,…]]格式
[IN|OUT|INOUT] <参数名><类型>

参数分为
输入参数:IN(默认参数)
输出参数: OUT
输入/输出参数: INOUT

存储过程的主体部分,被称为过程体
以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
以DELIMITER ;//分号前有空格

mysql> DELIMITER $$ //结束符是用户自定义
//省略存储过程其他步骤
mysql> DELIMITER ; //分号前有空格

实验:不带参数的存储过程

mysql> use stu; //进入数据库
mysql> show tables;
delimiter $$ //定义一个结束符号(在表中才能使用,即需要进入数据库)
创建一个存储过程,不带参数
在这里插入图片描述
改变结束符号,并调用过程名称
在这里插入图片描述

实验:带参数的存储过程

目的:获取wangwu的成绩,参数类型为in
在这里插入图片描述
注:结束符号自己定义
创建一个存储过程,名字为c in:表示参数类型,传入 (定义一个名称不能与表内名称相符)
在这里插入图片描述

验证:参数类型之间的比较(in,out,inout)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结1:in和inout参数会将全局变量的值转入存储过程中,而out参数不会将全局变量的值传入存储过程中。在存储过程使用中,参数值in、out、inout都会发生改变
在这里插入图片描述

总结2:调用完存储过程后,发现in参数不会对全局变量的值引起变化,而out和inout参数调用完存储过程后,会对全局变量的值产生变化,会将存储过程引用后的值给全局变量。
in参数赋值类型可以是变量还有定值,而out和inout参数赋值类型必须是变量。

调用存储过程

show procedure status where db=‘数据库’;

查询存储过程

show procedure status where db=‘数据库’;
在这里插入图片描述

删除存储过程

在这里插入图片描述

修改存储过程

存储过程的修改分为特征的修改和业务内容的修改。
特征的修改语法结构如下:

alter procedure 存储过程名 [ <特征> … ]
存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储 过程。

存储过程示例:
存储过程中只加入了一条select语句:
在这里插入图片描述
根据调用存储过程输入的实际参数进行查询:
在这里插入图片描述
根据调用存储过程输入的实际参数进行判断,对zhangsan用户的level字段和hobby字段进行修改:
在这里插入图片描述