MySQL存储过程详细指南介绍
MySQL如何使用存储过程?MySQL 存储过程将多个任务合二为一,并将任务保存在服务器上以备将来使用。
存储过程简化了数据库管理并减少了网络流量。例如,向 MySQL 服务器发出查询处理查询并返回结果。使用存储过程将查询保存在服务器上,以便稍后执行。
在本教程中,你将学习创建、列出、更改和删除存储过程,包含一些MySQL存储过程用法示例。
先决条件
- 已安装 MySQL 服务器和 MySQL Workbench
- 具有 root 权限的 MySQL 用户帐户
MySQL 中的存储过程是什么?
MySQL 存储过程是存储在数据库中的预编译 SQL 语句。它们是包含名称、参数列表和 SQL 语句的子例程。
所有关系数据库系统都支持存储过程并且不需要任何额外的运行时环境包。
如何使用存储过程?
要调用存储过程,可以使用CALL
语句或其他存储过程。第一次调用存储过程时,MySQL 在数据库目录中查找它,编译代码,将其放入缓存中,然后执行它。
同一会话中的后续运行会从高速缓存中执行存储过程,这使得它们对于重复性任务非常有用。
存储过程使用参数来传递值和自定义结果。参数用于指定查询操作并返回结果的表中的列。
存储过程也可以包括IF
,CASE
,和控制流语句是在程序上实现代码。LOOP
MySQL存储过程用法示例:创建存储过程
创建存储过程有两种方式:
1.使用 MySQL Shell
使用以下语法在 MySQL 中创建存储过程:
DELIMITER //
CREATE PROCEDURE procedure_name ( IN | OUT | INOUT parameter_name parameter_datatype (length), … )
BEGIN
SQL statements
END //
DELIMITER ;
默认情况下,语法与正在使用的数据库相关联,但你也可以通过以下方式指定数据库名称来使用另一个数据库的语法:database_name.procedure_name
.
这里,第一个DELIMITER
参数将默认分隔符设置为//
,而最后一个DELIMITER
参数将其设置回分号;
。要使用多个语句,请指定不同的分隔符,例如$$
.
过程名称在CREATE PROCEDURE
参数之后。在过程名称之后,使用括号指定要在过程中使用的参数、参数名称、数据类型和数据长度。用逗号分隔每个参数。
该参数的模式是:
IN
– 用于将参数作为输入传递。定义后,查询将参数传递给存储过程。参数值始终受到保护。OUT
– 用于将参数作为输出传递。你可以更改存储过程中的值,并将新值传递回调用程序。INOUT
–IN
和OUT
参数的组合。调用程序传递参数,过程可以修改INOUT
参数,将新值传递回程序。
例如:
通过调用它来执行存储过程:
CALL procedure_name;
查询返回存储过程的结果。
2.使用 MySQL 工作台
MySQL存储过程详细指南:创建存储过程的另一种方法是使用MySQL Workbench 向导。该向导直观且简化了过程,因为你不必放置分隔符或担心格式。
按着这些次序:
步骤 1:在 MySQL Workbench 的 Navigator 窗口中右键单击Stored Procedures,然后选择Create Stored Procedure...以启动向导。
步骤 2:指定过程名称并在BEGIN ... END块中输入代码。
第 3 步:查看代码并点击Apply。
步骤 4:点击Apply确认执行,点击Finish创建过程。
第 5 步:执行该程序以查看它是否有效。创建一个新的 SQL 选项卡来执行查询。
步骤 6: CALL
在 SQL 选项卡中单击程序并单击Execute。
如果没有错误返回,MySQL 将执行存储过程并显示结果。
注意:请参阅我们的 MySQL 表指南以了解如何在 MySQL 中创建表。
MySQL如何使用存储过程:列出存储过程
可以通过三种方式查看所有存储过程的列表:
1.使用 MySQL Shell
要获取你有权访问的所有存储过程的列表,包括它们的特征,请使用以下语法:
SHOW PROCEDURE STATUS [LIKE 'pattern' | WHERE search_condition]
该SHOW PROCEDURE STATUS
语句返回一个冗长的输出。该语句显示你在服务器上有权访问的存储过程的名称和特征。
滚动输出以查找当前在服务器上的过程。
该LIKE
参数查找名称中包含特定单词的存储过程。使用%
更换任何数目的字符,包括零。
例如:
该WHERE
参数允许你仅列出特定数据库中的存储过程。
例如:
在此示例中,该语句仅返回“ customer_list ”数据库的存储过程。
2.使用数据字典
MySQL存储过程详细指南:该INFORMATION_SCHEMA数据库包含一个称为表程序,这对相关的所有数据库当前MySQL服务器上的存储过程和函数的信息。
使用以下语法查看数据库的所有存储过程:
SELECT
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
AND routine_schema = 'database_name';
3.使用 MySQL 工作台
对于查看存储过程的 GUI 方法,请使用 MySQL Workbench。请按照以下步骤查看存储过程:
第 1 步:在导航器部分双击要使用的数据库。
步骤 2:展开存储过程下拉项。
此项显示当前数据库的所有存储过程。
MySQL存储过程用法示例:改变存储过程
改变一个存储过程意味着改变一个过程的特性。有没有说法在MySQL的修改参数或身体存储过程。要更改参数或主体,请删除存储过程并创建一个新的存储过程。
以两种方式更改存储过程:
1.使用 MySQL Shell
使用ALTER PROCEDURE
语句更改过程特征。例如,我们可以为之前创建的过程添加注释。语法是:
ALTER PROCEDURE procedure_name
COMMENT 'Insert comment here';
2.使用 MySQL 工作台
MySQL如何使用存储过程?MySQL Workbench GUI 允许用户更改存储过程,用户可以在其中添加参数或更改代码。MySQL Workbench删除现有的存储过程并在进行更改后创建一个新的存储过程。
按着这些次序:
步骤 1:在导航器部分,右键单击要修改的存储过程。选择“更改存储过程...”项。
Step 2: When the tab opens, make the desired changes to the existing stored procedure and click Apply .
第 3 步:出现一个SQL 脚本审查窗口,显示该过程 - 删除现有存储过程并创建一个包含更改的新存储过程。
单击应用 ,然后在下一个窗口中单击完成以执行脚本。
MySQL存储过程用法示例:删除存储过程
删除(删除)一个过程:
1.使用 MySQL Shell
使用该DROP PROCEDURE
语句从服务器中删除存储过程。
基本语法是:
DROP PROCEDURE [IF EXISTS] stored_procedure_name;
IF EXISTS
仅当存储过程存在于服务器上时,该参数才会删除该存储过程。输入存储过程的名称来代替stored_procedure_name
语法。
例如:
由于服务器上没有名为“ test ”的过程,因此输出表明有 0 行受到影响并且指定的过程不存在。
删除不带IF EXISTS
参数的不存在过程会返回错误。
2.使用 MySQL 工作台
MySQL如何使用存储过程?要使用 MySQL Workbench 删除存储过程,请执行以下步骤:
步骤 1:展开 Navigator 部分中的 Stored Procedures 项。右键单击要删除的存储过程,然后在上下文菜单中选择Drop Stored Procedure...。
步骤2:在确认窗口中,单击立即删除以删除存储过程。
此操作将永久删除该过程。
注意:查看我们的教程以了解如何在 MySQL 中删除表。
MySQL存储过程详细指南:MySQL存储过程的优缺点
存储过程有几个优点和缺点,因为它们适合特定的需求。以下是一些优点和缺点。
使用存储过程的优点
存储过程的优点是:
网络流量减少
存储过程通过将所有编程逻辑保留在服务器上来帮助减少应用程序和 MySQL 服务器之间的网络流量。应用程序只发送过程名称和参数输入,而不是通过网络发送多个查询结果。
提高安全性
数据库管理员授予应用程序调用和访问特定存储过程的权限,而不授予他们直接访问表的权限。存储过程有助于防止脚本注入攻击,因为输入参数被视为值而不是可执行代码。
集中式业务逻辑
存储过程封装了可由多个应用程序重用的业务逻辑。这有助于减少在许多不同应用程序中重复相同的逻辑并使数据库更加一致。
使用存储过程的缺点
存储过程的缺点是:
资源使用
使用许多存储过程和逻辑操作会导致每个连接的内存和CPU 使用率显着增加。
无便携性
将用特定语言编写的存储过程从一个安装移植到另一个安装并不容易。依赖存储过程还会将用户与特定数据库联系起来。
故障排除和测试
MySQL 不提供用于测试和调试存储过程的实用程序,因此调试它们可能很困难。开发和维护存储过程需要广泛的知识。这对新开发人员来说是一个挑战,并会增加维护成本。
MySQL存储过程用法示例总结
MySQL如何使用存储过程?阅读本文后,你将了解什么是存储过程以及何时使用它们。你还知道如何创建、修改、查看所有可用的存储过程以及删除不再需要的存储过程。