MySQL 中的存储过程(Stored Procedure)
MySQL 中的**存储过程(Stored Procedure)**是指事先经过编译并存储在数据库中的一组 SQL 语句集合,它可以像函数一样被反复调用。它主要用于封装业务逻辑,提高可维护性和执行效率。
一、MySQL 存储过程的语法
1. 创建存储过程的基本语法
DELIMITER $$
CREATE PROCEDURE proc_name (
IN param1 INT, -- 输入参数
OUT param2 VARCHAR(50) -- 输出参数
)
BEGIN
-- SQL 语句块
SELECT column_name INTO param2 FROM table_name WHERE id = param1;
END $$
DELIMITER ;
示例:创建一个简单的存储过程
DELIMITER $$
CREATE PROCEDURE GetUserNameById (
IN userId INT,
OUT userName VARCHAR(100)
)
BEGIN
SELECT name INTO userName FROM users WHERE id = userId;
END $$
DELIMITER ;
调用方法:
CALL GetUserNameById(1, @name);
SELECT @name;
二、存储过程参数类型
| 参数类型 | 说明 |
|---|---|
| IN | 传入参数,调用时提供值 |
| OUT | 输出参数,过程内部赋值返回 |
| INOUT | 可传入也可返回 |
三、管理存储过程
- 查看所有存储过程:
SHOW PROCEDURE STATUS WHERE Db = 'your_database_name';
- 查看存储过程定义:
SHOW CREATE PROCEDURE procedure_name;
- 删除存储过程:
DROP PROCEDURE IF EXISTS procedure_name;
四、使用场景与优势
✅ 优势:
- 封装业务逻辑: 封装复杂逻辑,使客户端代码简洁。
- 提高性能: 避免频繁与数据库的交互,执行速度更快。
- 提高安全性: 控制对数据的访问权限,避免直接暴露表结构。
- 可重用性高: 写一次可以多次调用,维护更方便。
- 减少网络流量: 多条 SQL 可以在服务器端执行,无需频繁传输。
📌 使用场景:
- 封装常用查询逻辑(如分页查询、报表生成)
- 事务处理(在存储过程中使用 BEGIN … COMMIT/ROLLBACK)
- 自动化任务(结合 Event Scheduler)
- 复杂的批处理逻辑
五、拓展内容(自学)
- 条件控制:
IF ... THEN ... ELSE - 循环结构:
WHILE、LOOP、REPEAT - 异常处理:
DECLARE ... HANDLER - 游标:
DECLARE cursor_name CURSOR FOR SELECT ...
六、学习资源推荐
- 官方文档(MySQL 8.0):
- Stored Procedures and Functions:
👉 https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html
- 菜鸟教程(中文):
👉 https://www.runoob.com/mysql/mysql-stored-procedure.html - MySQL 事务处理 + 存储过程综合实践(极客时间专栏/博客)
- 推荐使用关键字
MySQL 存储过程 实战 site:juejin.cn进行搜索阅读实战内容。
更多详细内容请关注其他相关文章!