MySQL存储过程创建与使用详解
一、存储过程创建基础
- 基础语法结构(需修改默认分隔符)
SQL
DELIMITER $$ -- 修改分隔符 CREATE PROCEDURE 过程名([参数列表]) BEGIN -- SQL逻辑代码 END$$ DELIMITER ; -- 恢复默认分隔符
- 简单插入示例
SQL
DELIMITER $$
CREATE PROCEDURE InsertUser(
IN p_name VARCHAR(20),
IN p_age INT
)
BEGIN
INSERT INTO test_table(name, age)
VALUES(p_name, p_age);
END$$
DELIMITER ;
调用示例:
SQL
CALL InsertUser('张三', 25); -- 插入基础数据[^2]
二、高级功能实现
- 带输出参数的统计
SQL
DELIMITER $$ CREATE PROCEDURE GetTotalAge( OUT total_age INT ) BEGIN SELECT SUM(age) INTO total_age FROM test_table; END$$ DELIMITER ;
调用方式:
SQL
CALL GetTotalAge(@total); SELECT @total AS 总年龄;
- 错误处理机制
SQL
DELIMITER $$ CREATE PROCEDURE SafeInsert( IN p_name VARCHAR(20), OUT result_code INT ) BEGIN DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN SET result_code = -1; END; INSERT INTO test_table(name) VALUES(p_name); SET result_code = 1; END$$ DELIMITER ;
操作类型 | 命令示例 | 说明 |
---|---|---|
查看过程列表 | SHOW PROCEDURE STATUS; | 显示所有存储过程基本信息 |
查看创建语句 | SHOW CREATE PROCEDURE InsertUser; | 显示具体创建语句 |
修改过程特征 | ALTER PROCEDURE InsertUser COMMENT '新注释' | 修改非逻辑特征 |
删除过程 | DROP PROCEDURE IF EXISTS InsertUser; | 移除存储过程 |
**** | ***** | *** |
四、实际应用场景
- 批量数据处理:适合需要事务处理的批量更新操作
- 复杂业务逻辑封装:将多步操作封装为原子操作
- 权限控制:通过存储过程限制直接表访问
- 性能优化:减少网络传输消耗,预编译提升执行效率