作者/来源:新睿云小编 发布时间:2019-11-13
一、存储过程入门
以下SELECT语句customers从示例数据库返回表中的所有行:
SELECT
customerName,
city,
state,
postalCode,
country
FROM
customers
ORDER BY customerName;
此图显示了查询的部分输出:
当您使用MySQL工作台或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;
根据定义,存储过程是陈述式SQL语句存储在MySQL服务器内部。在此示例中,我们刚刚创建了一个名称为的存储过程GetCustomers()。
保存存储过程后,您可以调用通过使用以下CALL语句:
CALL GetCustomers();
并且该语句返回与查询相同的结果。
你第一次调用在存储过程中,MySQL在数据库目录中查找名称,编译该存储过程的代码,将其放在称为缓存的存储区中,然后执行该存储过程。
如果你调用在同一会话中再次使用相同的存储过程,MySQL只需从缓存执行存储过程,而不必重新编译它。
存储过程可以具有参数,因此您可以将值传递给它,然后将结果取回。例如,您可以有一个存储过程,可以按国家和城市返回客户。在这种情况下,国家和城市是参数存储过程。
存储过程可能包含控制流语句(例如IF,)CASE,这些语句LOOP使您可以在程序方式。
存储过程可以调用其他存储过程或存储函数,这使您可以调制代码。
请注意,您将学习一步步如何在下一个教程中创建新的存储过程。
二、MySQL存储过程的优势
以下是存储过程的优点。
减少网络流量
存储过程有助于减少应用程序和MySQL Server之间的网络流量。因为应用程序不必发送多个冗长的SQL语句,而仅发送名称和参数存储过程。
集中数据库中的业务逻辑
您可以使用存储过程来实现以下业务逻辑:可重用通过多个应用程序。存储过程有助于减少在许多应用程序中重复相同逻辑的工作,并使数据库更加一致。
使数据库更安全
数据库管理员可以为仅访问特定存储过程的应用程序授予适当的特权,而无需在底层的表。
MySQL存储过程的缺点
除了这些优点之外,存储过程还具有缺点:
资源使用
如果使用许多存储过程,则每个连接的内存使用量将大大增加。
除了,过度使用存储过程中的大量逻辑操作将增加CPU使用率,因为MySQL的逻辑操作设计不佳。
故障排除
很难调试存储过程。不幸的是,MySQL没有提供任何功能来调试像其他企业数据库产品(例如Oracle和SQL Server)一样的存储过程。
维修保养
开发和维护存储过程通常需要专门并非所有应用程序开发人员都具备的技能。这可能会导致应用程序开发和维护方面的问题。