MySQL 存储过程 - 基础

MySQL 存储过程介绍

MySQL 5.0 版本开始支持存储过程。

存储过程(PROCEDURE)是事先经过编译并存储在数据库中的一段SQL语句的集合。调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是很有好处的。

MySQL 存储过程的优点

MySQL存储过程是按需编译的。编译存储过程后,MySQL将其放入缓存并为每个连接维护自己的存储过程缓存。如果应用程序在单个连接中多次使用存储过程,则使用编译版本,否则,存储过程的工作方式类似于查询。

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

存储过程对任何应用程序都是可重用且透明的。存储过程将数据库接口公开给所有应用程序,以便开发人员不必开发存储过程中已经支持的功能。

存储过程是安全的。数据库管理员可以为访问数据库中的存储过程的应用程序授予适当的权限,而无需为基础数据库表提供任何权限。

MySQL存储过程的缺点

如果使用许多存储过程,则使用这些存储过程的每个连接的内存使用量将显着增加。此外,如果在存储过程中过度使用大量逻辑操作,CPU使用率将会增加,因为数据库服务器没有针对逻辑操作进行良好设计。

调试存储过程很困难。只有少数数据库管理系统允许您调试存储过程。不幸的是,MySQL没有提供调试存储过程的工具。

开发和维护存储过程并不容易。开发和维护存储过程通常需要一种并非所有应用程序开发人员都具备的专业技能。这可能会导致应用程序开发和维护阶段出现问题。

MySQL存储过程各有优缺点。在开发应用程序时,应根据应用程序的体系结构决定是否使用存储过程。

创建存储过程语法

DELIMITER $$
 CREATE PROCEDURE 存储过程名称()
   BEGIN
   存储过程命令;
   END $$
 DELIMITER ; 

创建及调用示例

一个简单的查询存储过程示例,实际应用会比示例复杂,本实例仅用于演示存储过程创建及调用 :

创建

DElIMITER $$
CREATE PROCEDURE test()
    BEGIN
		    SELECT * from classes;
    END $$
DElIMITER;

使用 CALL 关键字调用存储过程

 
CALL test();

显示存储过程

SHOW PROCEDURE STATUS WHERE db = "test"

显示存储过程的源码

SHOW CREATE PROCEDURE 存储过程名;

SHOW CREATE PROCEDURE test;

删除存储过程

# DROP PROCEDURE 存储过程名;
DROP PROCEDURE IF EXISTS test;