mysql存储过程与存储函数
存储过程和存储函数是mysql支持的过程式数据库对象。可以提高数据库的处理速度,提高数据库编程的灵活性。
一、存储过程
1、概述
一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程有参数)来调用执行它。
封装性。被创建后,可以被多次调用,即使对存储过程进行修改,不会直接影响到调用它的应用程序;
增加sql语句的功能与灵活性。可以用流控制语句编写,完成复杂的判断和较复杂的运算;
减少网络流量。在服务器端运行,执行速度快;
高性能。执行过一次后,产生的二进制代码就可以驻留在缓冲区;
提高数据库安全性和数据完整性。存储过程可以完成所有数据库操作,并通过编程方式控制数据库信息访问的权限
2、存储过程
可以使用create procedure语句创建存储过程
语法格式:
create procedure <过程名> ([过程参数[,...]]) <过程体>
[过程参数[,...]]格式
[in|out|input] <参数名> <类型>
参数说明:
<过程名> 存储过程的名称
[过程参数[,…]]存储过程的参数列表
[过程体]存储过程的主体部分,以Begin开始,End结束
在mysql中,服务器处理sql默认是以分号作为语句结束标志,为解决这个问题,需要使用delimiter命令将结束命令修改城其他字符。语法格式:delimiter ??
实例:
在数据库mytest中,创建一个存储过程,存储的功能是依据学生的id,修改studentes的姓名。
use mytest;
delimiter ??
create procedure update_name(in cid int,in cname char(50))
Begin
update students set student_name=cname where student_id=cid;
End ??
在创建存储函数时,用户必须具有create routine权限;
使用如下命令,查询有哪些存储过程:
show procedure status;
查询某个具体存储过程:
show create procedure <存储过程名>
3、存储过程体
可以使用各种sql语句与过程式语句的结合。对数据库应用中的复杂业务逻辑和处理规则进行封装。
3.1 局部变量
在存储过程体中可以声明局部变量,用来存放产生的临时结果。
语法格式:
declare