存储过程简介
从 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)
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字段进行修改: