MySQL存储过程介绍

在本教程中,您将了解 MySQL 存储过程及其优缺点。

摘要:在本教程中,您将了解 MySQL 存储过程及其优缺点。

开始使用存储过程

以下 SELECT 语句 customers 从示例数据库返回表中的所有行:

SELECT 
    customerName, 
    city, 
    state, 
    postalCode, 
    country
FROM
    customers
ORDER BY customerName;

这张图显示了查询的部分输出:

当您使用 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 ;

根据定义,存储过程是存储在 MySQL 服务器中的一段声明性 SQL 语句。在这个例子中,我们刚刚创建了一个名为 的存储过程 GetCustomers() 。

保存存储过程后,您可以使用以下 CALL 语句调用它:

CALL GetCustomers();

并且该语句返回与查询相同的结果。

第一次调用存储过程时,MySQL 会在数据库目录中查找名称,编译存储过程的代码,将其放置在称为缓存的内存区域中,然后执行存储过程。

如果在同一个会话中再次调用同一个存储过程,MySQL 只需从缓存中执行该存储过程,而无需重新编译它。

存储过程可以有参数,因此您可以将值传递给它并返回结果。例如,您可以有一个按国家和城市返回客户的存储过程。在这种情况下,国家和城市是存储过程的参数。

存储过程可以包含控制流语句,例如 IF , CASE 和 LOOP ,让您实现在程序方式的代码。

一个存储过程可以调用其他存储过程或存储函数,这允许您对代码进行模块化。

请注意,您将在下一个教程中逐步了解如何创建新的存储过程。

MySQL存储过程优势

以下是存储过程的优点。

减少网络流量

存储过程有助于减少应用程序和 MySQL 服务器之间的网络流量。因为应用程序不必发送多个冗长的 SQL 语句,而只需发送存储过程的名称和参数。

将业务逻辑集中在数据库中

您可以使用存储过程来实现可由多个应用程序重用的业务逻辑。存储过程有助于减少在许多应用程序中复制相同逻辑的工作,并使您的数据库更加一致。

让数据库更安全

数据库管理员可以向仅访问特定存储过程的应用程序授予适当的权限,而不授予对基础表的任何权限。

MySQL存储过程的缺点

除了这些优点,存储过程也有缺点:

资源使用

如果使用多个存储过程,每个连接的内存使用量都会大幅增加。

此外,在存储过程中过度使用大量的逻辑操作会增加 CPU 使用率,因为 MySQL 没有为逻辑操作设计好。

故障排除

很难调试存储过程。不幸的是,MySQL 没有提供任何工具来调试存储过程,如 Oracle 和 SQL Server 等其他企业数据库产品。

维护

开发和维护存储过程通常需要并非所有应用程序开发人员都具备的专业技能。这可能会导致应用程序开发和维护方面的问题。

在本教程中,您了解了 MySQL 存储过程及其优点和缺点。让我们继续学习如何在 MySQL 中创建一个新的存储过程。