很多面试都会问到存储过程,今天给大家介绍一下什么是mysql存储过程(需要MySQL 5 以及以后的版本支持存储过程),详细介绍存储过程的相关内容。
1. 什么是存储过程
存储过程是为了以后的使用而保存在数据库中的sql语句,可能是一条或者是多条sql语句的集合,经过一次编译后就不需要再次编译,只需通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它,可以简单的认为是批文件,实际作用不仅仅是批处理。
2. 为什么需要使用存储过程
此事就会有人问存储过程存在的意义是为了?存储过程主要的优点可以总结为简单、安全、高性能。
简单:存储过程可以看做是将重复的操作语句进行封装起来,以后使用可以直接调用,大大简化了人员的工作量;
安全:存储过程可以管理员设定某些用户才能使用,确保了安全性;
高性能:一般的sql语句每次执行一次就会编译一次,但是存储过程只是在创造时候编译,以后调用时候不会再次执行编译,所以使用存储过程可提高数据库执行速度。
3. 如何创建存储过程
存储过程分为有参数和无参数两种,下面详细介绍。
3.1无参数存储过程
到了这里就该给大家介绍如何创建存储过程了。一般的创建存储过程的模板是:
create procedure porcedureName()
begin
......
end;
porcedureName是存储过程名称,可以自己根据需求修改,省略号处是自己将要执行的sql语。
简单举个,创建一个queryName的存储过程,查询user表中的用户名称:
create procedure queryName()
begin
select name from user;
end;
3.2有参存储过程
上述存储过程只是简单地查询用户名,但是并没有什么返回结果,一般的存储过程是根据传入的参数返回指定的结果,这就要使用带参数的存储过程了。
存储过程参数需要指定其性质,IN 、OUT 这两个必须放在指定的参数前面申明参数的性质,在参数前面加IN是申明改参数是传入参数,将会在存储过程中使用,OUT是输出参数,存储过程的返回值需要指定对象来接收,下面用例子来说明:
CREATE PROCEDURE queryid(IN name CHAR(255),OUT queryid INT )
BEGIN
SELECT id from log_user where user_name= name INTO queryid;
END;
上面存储过程是传入用户的名字查询用户的id,最后将id赋值给queryid;,IN name char(255)是输入查询的用户名,OUT queryid int 是返回queryid;
存储过程的参数并不是指限定一个,可以是多个,类型也是可以更具自己的需求进行设定的。
4.调用存储过程
当我们创建好存储过程,就是需要知道怎么去调用了,调用上面创建的第一个无参数的queryName存储过程:
call queryName();
调用有参存储过程queryid:
call queryid('admin',@queryid);
select @queryid;
此处admin是传入的参数,@queryid是接收参数,调用的时候需要加上@符号,第二句是展示查询的结果.
5.删除存储过程
DROP PROCEDURE queryName;
DROP PROCEDURE queryid;
删除以上的存储过程,还有一部分语句可以帮你查看存储过程
-- 查看存储过程状态
show procedure status;
--查看具体的创出过程状态
show create procedure 存储过程名称;