## 25.2 使用存储的例程

[25.2.1 存储例程语法](stored-routines-syntax.html)
[25.2.2 存储例程和 MySQL 权限](stored-routines-privileges.html)
[25.2.3 存储的例程元数据](stored-routines-metadata.html)
[25.2.4 存储过程、函数、触发器和LAST\_插入\_ID（）](stored-routines-last-insert-id.html)

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

MySQL 支持存储例程（过程和函数）。存储例程是一组可以存储在服务器中的 SQL 语句。完成此操作后，客户端无需继续重新发出单个语句，而是可以参考存储的例程。

存储的例程在某些情况下特别有用：

-   当多个客户端应用程序用不同的语言编写或工作在不同的平台上，但需要执行相同的数据库操作时。

-   当安全是最重要的。例如，银行将存储过程和函数用于所有常见操作。这提供了一致且安全的环境，并且例程可以确保正确记录每个操作。在这样的设置中，应用程序和用户将无法直接访问数据库表，而只能执行特定的存储例程。

    存储的例程可以提供改进的性能，因为需要在服务器和客户端之间发送的信息更少。权衡是这确实增加了数据库服务器的负载，因为更多的工作是在服务器端完成的，而在客户端（应用程序）端完成的工作更少。如果许多客户端机器（例如 Web 服务器）仅由一个或几个数据库服务器提供服务，请考虑这一点。

    存储例程还使您能够在数据库服务器中拥有函数库。这是现代应用程序语言共享的功能，可在内部实现此类设计（例如，通过使用类）。即使在数据库使用范围之外，使用这些客户端应用程序语言特性对程序员也是有益的。

    MySQL 遵循 SQL:2003 存储例程的语法，IBM 的 DB2 也使用该语法。支持此处描述的所有语法，并在适当的地方记录任何限制和扩展。

### 其他资源

-   你可能会发现[存储过程用户论坛](https://forums.mysql.com/list.php?98)在处理存储过程和函数时使用。

-   有关 MySQL 中存储例程的一些常见问题的答案，请参阅[第 A.4 节，“MySQL 8.0 常见问题解答：存储过程和函数”](faqs-stored-procs.html).

-   存储例程的使用有一些限制。看[第 25.8 节，“对存储程序的限制”](stored-program-restrictions.html).

-   存储例程的二进制日志记录发生在[第 25.7 节，“存储程序二进制日志”](stored-programs-logging.html).
