MySQL:存储过程(PROCEDURE)
目录
参考:
# MySQL:存储过程(PROCEDURE)
MySQL5.0 版本开始支持存储过程。
# 一、什么是存储过程
如果在实现的某些需求时,需要编写一组复杂的SQL语句才能实现的时候,那么我们就可以将这组复杂的SQL语句集提前编写在数据库中,由JDBC调用来执行这组SQL语句。把编写在数据库中的SQL语句集称为存储过程。
存储过程:(PROCEDURE)是事先经过编译并存储在数据库中的一段SQL语句的集合。
调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是很有好处的。也就是数据库SQL语言层面的代码封装与重用。
好处:提高代码的重用性;简化操作;减少编译的次数和连接数据库服务器的连接次数,提高了效率。
为何要使用存储过程?
简化对变动的管理。如果表名、列名、或业务逻辑有了变化。只需要更改存储过程的代码。使用它的人不用更改自己的代码。
通常存储过程都是有助于提高应用程序的性能。当创建的存储过程被编译之后,就存储在数据库中,可重复使用,提高代码重用率。
存储过程有助于减少应用程序和数据库服务器之间的流量。 因为应运程序不必发送多个冗长的SQL语句,只用发送存储过程中的名称和参数即可。
# 二、存储过程的基本使用
# 创建语法
CREATE PROCEDURE 存储过程名([参数列表])
BEGIN
存储过程体(SQL语句)
END 结束标记
2
3
4
参数列表包含三个部分:参数模式 参数名 参数类型,如:in stuname varchar(20)
参数模式:
in :该参数需要调用时需传入值
out:该参数可以作为返回值
inout:该参数既需要传入值,又可以返回值
存储过程体只有一句话时,begin end 可以省略,每条sql语句的结尾必须加分号。
设置存储过程的结束标记
在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束标记。原因是因为在命令行执行存储过程语句时,会直接在第一个“;”处结束,而要实现存储过程要在end后面的结束标记结束,所以需要指定SQL语句的结束标记。
语法:
delimiter 结束标记
-- 此时'$'就为当前存储过程的结束标记
delimiter $
2
使用完,我们可以重写使用关键字delimiter指定原来的;为结束标记,不然后续每个SQL语句的结束标记都是$了。
示例
delimiter $
create procedure p_demo()
begin
select * from student;
end $
delimiter ;
2
3
4
5
6
# 调用语法
CALL 存储过程名([实参列表]) 结束标记
示例
delimiter $
call p_demo() $
delimiter ;
2
3
# 删除语法
DROP PROCEDURE [IF EXISTS] 存储过程名 结束标记
不可一条语句删除多个存储过程,一次只能删除一个
示例
delimiter $
drop procedure if exists p_demo $
delimiter ;
2
3
# 查看语法
SHOW CREATE PROCEDURE 存储过程名 结束标记
示例
delimiter $
show create procedure p_demo $
delimiter ;
2
3
-- 查询指定数据库的存储过程及状态信息(xxx是数据库名)
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'xxx';
2