主题
MySQL 存储过程
存储过程是一组保存在数据库中的 SQL 语句,适合封装批处理、复杂数据修正、定时任务等逻辑。
业务系统中不要滥用存储过程。跨服务、跨数据库迁移和版本管理会更复杂。
创建
sql
DELIMITER $$
CREATE PROCEDURE create_order(
IN p_user_id BIGINT,
IN p_amount DECIMAL(10, 2),
OUT p_order_id BIGINT
)
BEGIN
INSERT INTO orders (user_id, amount)
VALUES (p_user_id, p_amount);
SET p_order_id = LAST_INSERT_ID();
END $$
DELIMITER ;参数模式:
IN:输入参数。OUT:输出参数。INOUT:既作为输入,也作为输出。
调用
sql
CALL create_order(1, 99.00, @order_id);
SELECT @order_id;查看和删除
sql
SHOW PROCEDURE STATUS WHERE Db = DATABASE();
SHOW CREATE PROCEDURE create_order;
DROP PROCEDURE IF EXISTS create_order;常见注意点
- 存储过程内部每条 SQL 仍需要分号。
- 创建过程时通常需要临时修改
DELIMITER。 - 复杂逻辑要注意事务边界和异常处理。
- 应用层和数据库层不要重复维护同一套业务规则。
