摘要:在本教程中,您将了解 MySQL 存储过程及其优点和缺点。
存储过程入门
以下SELECT
语句返回示例数据库中的customers
表中的所有行:
SELECT
customerName,
city,
state,
postalCode,
country
FROM
customers
ORDER BY customerName;
Code language: SQL (Structured Query Language) (sql)
这张图显示了查询的部分输出:
当您使用 MySQL Workbench 或 mysql shell 向 MySQL Server 发出查询时,MySQL 会处理查询并返回结果集。
如果您想将此查询保存在数据库服务器上以便稍后执行,一种方法是使用存储过程。
以下CREATE PROCEDURE
语句创建一个包装上述查询的新存储过程:
DELIMITER $$
CREATE PROCEDURE GetCustomers()
BEGIN
SELECT
customerName,
city,
state,
postalCode,
country
FROM
customers
ORDER BY customerName;
END$$
DELIMITER ;
Code language: SQL (Structured Query Language) (sql)
根据定义,存储过程是存储在 MySQL 服务器内的一段声明性 SQL 语句。在此示例中,我们刚刚创建了一个名为GetCustomers()
的存储过程。
保存存储过程后,您可以使用CALL
语句调用它:
CALL GetCustomers();
Code language: SQL (Structured Query Language) (sql)
并且该语句返回与查询相同的结果。
第一次调用存储过程时,MySQL 在数据库目录中查找名称,编译存储过程的代码,将其放置在称为高速缓存的内存区域中,然后执行存储过程。
如果您在同一个会话中再次调用相同的存储过程,MySQL 只会从缓存中执行该存储过程,而无需重新编译它。
存储过程可以具有参数,因此您可以向其传递值并获取结果。例如,您可以有一个按国家/地区和城市返回客户的存储过程。在本例中,国家和城市是存储过程的参数。
存储过程可能包含控制流语句,例如IF
、 CASE
和LOOP
,允许您以过程方式实现代码。
存储过程可以调用其他存储过程或存储函数,这使您可以模块化代码。
请注意,您将在下一个教程中逐步学习如何创建新的存储过程。
MySQL存储过程的优点
以下是存储过程的优点。
减少网络流量
存储过程有助于减少应用程序和 MySQL 服务器之间的网络流量。因为应用程序不必发送多个冗长的 SQL 语句,而只需发送存储过程的名称和参数。
将业务逻辑集中在数据库中
您可以使用存储过程来实现可由多个应用程序重用的业务逻辑。存储过程有助于减少在许多应用程序中重复相同逻辑的工作,并使数据库更加一致。
让数据库更安全
数据库管理员可以向仅访问特定存储过程的应用程序授予适当的权限,而不授予对基础表的任何权限。
MySQL存储过程的缺点
除了这些优点之外,存储过程也有缺点:
资源使用情况
如果使用很多存储过程,每个连接的内存使用量将会大幅增加。
另外,由于MySQL对于逻辑操作的设计并不好,因此在存储过程中过度使用大量的逻辑操作会增加CPU的使用率。
故障排除
调试存储过程很困难。不幸的是,MySQL 不提供任何工具来调试存储过程,就像其他企业数据库产品(例如 Oracle 和 SQL Server)一样。
维护保养
开发和维护存储过程通常需要专门的技能,但并非所有应用程序开发人员都具备这些技能。这可能会导致应用程序开发和维护方面出现问题。
在本教程中,您了解了 MySQL 存储过程及其优点和缺点。让我们继续学习如何在 MySQL 中创建新的存储过程。