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 Server之间的网络流量。
因为应用程序不必发送多个冗长的SQL语句,而仅发送存储过程的名称和参数。
在数据库中集中业务逻辑
您可以使用存储过程来实现可被多个应用程序重用的业务逻辑。
存储过程有助于减少在许多应用程序中重复相同逻辑的工作,并使数据库更加一致。
使数据库更安全
数据库管理员可以为仅访问特定存储过程的应用程序授予适当的特权,而无需在基础表上授予任何特权。
MySQL存储过程的缺点
除了这些优点之外,存储过程还具有缺点:
资源使用
如果使用许多存储过程,则每个连接的内存使用量将大大增加。
此外,由于MySQL并非为逻辑操作而精心设计,因此在存储过程中过度使用大量逻辑操作会增加CPU使用率。
故障排除
调试存储过程很困难。
不幸的是,MySQL没有像其他企业数据库产品(如Oracle和SQL Server)那样提供任何调试存储过程的功能。
维修保养
开发和维护存储过程通常需要并非所有应用程序开发人员都具备的专门技能。
这可能会导致应用程序开发和维护方面的问题。
在本教程中,您了解了MySQL存储过程,它们的优缺点。
让我们继续学习如何在MySQL中创建新的存储过程。