MySQL:存储过程(PROCEDURE)

12/31/2023 后端数据库MySQL

目录


参考:


# MySQL:存储过程(PROCEDURE)

MySQL5.0 版本开始支持存储过程。

# 一、什么是存储过程

如果在实现的某些需求时,需要编写一组复杂的SQL语句才能实现的时候,那么我们就可以将这组复杂的SQL语句集提前编写在数据库中,由JDBC调用来执行这组SQL语句。把编写在数据库中的SQL语句集称为存储过程。

存储过程:(PROCEDURE)是事先经过编译并存储在数据库中的一段SQL语句的集合。

调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是很有好处的。也就是数据库SQL语言层面的代码封装与重用。

好处:提高代码的重用性;简化操作;减少编译的次数和连接数据库服务器的连接次数,提高了效率。

为何要使用存储过程?

  • 简化对变动的管理。如果表名、列名、或业务逻辑有了变化。只需要更改存储过程的代码。使用它的人不用更改自己的代码。

  • 通常存储过程都是有助于提高应用程序的性能。当创建的存储过程被编译之后,就存储在数据库中,可重复使用,提高代码重用率。

  • 存储过程有助于减少应用程序和数据库服务器之间的流量。 因为应运程序不必发送多个冗长的SQL语句,只用发送存储过程中的名称和参数即可。

# 二、存储过程的基本使用

# 创建语法

CREATE PROCEDURE 存储过程名([参数列表])
BEGIN
	存储过程体(SQL语句)
END 结束标记
1
2
3
4

参数列表包含三个部分:参数模式 参数名 参数类型,如:in stuname varchar(20)

  • 参数模式:

    • in :该参数需要调用时需传入值

    • out:该参数可以作为返回值

    • inout:该参数既需要传入值,又可以返回值

存储过程体只有一句话时,begin end 可以省略,每条sql语句的结尾必须加分号。

设置存储过程的结束标记

在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter指定SQL语句的结束标记。原因是因为在命令行执行存储过程语句时,会直接在第一个“;”处结束,而要实现存储过程要在end后面的结束标记结束,所以需要指定SQL语句的结束标记。

语法:

delimiter 结束标记
1
-- 此时'$'就为当前存储过程的结束标记
delimiter $ 
1
2

使用完,我们可以重写使用关键字delimiter指定原来的;为结束标记,不然后续每个SQL语句的结束标记都是$了。

示例

delimiter $
create procedure p_demo()
begin
	select * from student;
end $
delimiter ;
1
2
3
4
5
6

# 调用语法

CALL 存储过程名([实参列表]) 结束标记
1

示例

delimiter $
call p_demo() $
delimiter ;
1
2
3

# 删除语法

DROP PROCEDURE [IF EXISTS] 存储过程名 结束标记
1

不可一条语句删除多个存储过程,一次只能删除一个

示例

delimiter $
drop procedure if exists p_demo $
delimiter ;
1
2
3

# 查看语法

SHOW CREATE PROCEDURE 存储过程名 结束标记
1

示例

delimiter $
show  create procedure p_demo $
delimiter ;
1
2
3
-- 查询指定数据库的存储过程及状态信息(xxx是数据库名)
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'xxx';
1
2
上次更新时间: 9/25/2024, 1:17:45 AM