目录
6.3 使用 EXPLAIN 和 SHOW PROFILE 工具
1. 什么是 MySQL 存储过程?
定义
MySQL 存储过程是一种将 SQL 语句组合成一个逻辑单元的数据库对象,用户可以通过 CALL
语句调用它进行操作。存储过程的最大优势是可以通过封装逻辑来简化复杂的数据库操作,减少应用程序与数据库之间的交互。
工作原理
当你调用一个存储过程时,MySQL 会从数据库中读取存储过程的执行计划,并执行其中的 SQL 语句。与其他 SQL 操作不同的是,存储过程会将多个 SQL 操作封装成一个事务,并且能够接受和返回参数。
2. 存储过程的优势
- 性能提升:存储过程在数据库端执行,可以减少应用与数据库之间的通信开销,尤其对于复杂的查询和大量数据处理时,性能优势更加明显。
- 封装与复用:存储过程将复杂的业务逻辑封装在数据库中,可以被多个程序重复使用。
- 增强安全性:通过使用存储过程,开发人员可以隐藏数据访问的细节,仅暴露必要的功能接口,从而减少 SQL 注入的风险。
- 简化管理:当数据库中有大量复杂 SQL 查询时,使用存储过程可以使代码更加简洁且易于管理。
3. 创建存储过程的基础语法
MySQL 创建存储过程的基本语法如下:
DELIMITER $$ -- 设置分隔符
CREATE PROCEDURE procedure_name (参数列表)
BEGIN
-- 存储过程体,包含 SQL 语句
END$$
DELIMITER ; -- 恢复分隔符
示例 1:创建一个简单的存储过程
DELIMITER $$
CREATE PROCEDURE GetEmployeeInfo(IN emp_id INT)
BEGIN
SELECT name, position FROM employees WHERE employee_id = emp_id;
END$$
DELIMITER ;
该存储过程接受一个员工 ID 作为输入参数,并返回该员工的姓名和职位。
说明
DELIMITER
:用于修改 MySQL 命令行的语句分隔符,默认的分隔符是分号 (;
),在创建存储过程时需要将其临时更改为其他符号(如$$
),以便 MySQL 可以正确解析存储过程的内容。IN
:表示输入参数,用于传递值给存储过程。BEGIN ... END
:存储过程的主体部分,用来包含一系列 SQL 语句。
4. 存储过程的参数类型及应用
存储过程的参数分为三种类型:输入参数(IN)、输出参数(OUT)和输入输出参数(INOUT)。下面我们分别讲解它们的使用方式。
4.1 输入参数(IN)
IN
参数表示存储过程的输入参数,调用存储过程时需要传递值。例如:
CREATE PROCEDURE GetEmployeeInfo(IN emp_id INT)
BEGIN
SELECT name, position FROM employees WHERE employee_id = emp_id;
END;