MySQL 中的存储过程(Stored Procedure)
                           
天天向上
发布: 2025-05-28 23:40:17

原创
303 人浏览过

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;

四、使用场景与优势

✅ 优势:

  1. 封装业务逻辑: 封装复杂逻辑,使客户端代码简洁。
  2. 提高性能: 避免频繁与数据库的交互,执行速度更快。
  3. 提高安全性: 控制对数据的访问权限,避免直接暴露表结构。
  4. 可重用性高: 写一次可以多次调用,维护更方便。
  5. 减少网络流量: 多条 SQL 可以在服务器端执行,无需频繁传输。

📌 使用场景:

  • 封装常用查询逻辑(如分页查询、报表生成)
  • 事务处理(在存储过程中使用 BEGIN … COMMIT/ROLLBACK)
  • 自动化任务(结合 Event Scheduler)
  • 复杂的批处理逻辑

五、拓展内容(自学)

  • 条件控制:IF ... THEN ... ELSE
  • 循环结构:WHILELOOPREPEAT
  • 异常处理:DECLARE ... HANDLER
  • 游标:DECLARE cursor_name CURSOR FOR SELECT ...

六、学习资源推荐

  1. 官方文档(MySQL 8.0):
  1. 菜鸟教程(中文):
    👉 https://www.runoob.com/mysql/mysql-stored-procedure.html
  2. MySQL 事务处理 + 存储过程综合实践(极客时间专栏/博客)
  • 推荐使用关键字 MySQL 存储过程 实战 site:juejin.cn 进行搜索阅读实战内容。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *