答案:MySQL存储过程通过DELIMITER定义,支持IN、OUT、INOUT参数,可封装SQL逻辑,提升复用性与效率。

在 MySQL 中使用存储过程执行 SQL 语句,可以将常用或复杂的操作封装起来,提高代码复用性和执行效率。通过 CREATE PROCEDURE 命令定义存储过程,并在其中编写需要执行的 SQL 逻辑。
创建存储过程的基本语法
使用 DELIMITER 更改语句结束符,避免内部的分号提前结束定义:
DELIMITER //CREATE PROCEDURE procedure_name() BEGIN -- 在这里写要执行的 SQL 语句 SELECT * FROM your_table; END //
DELIMITER ;
例如,创建一个查询用户表所有数据的存储过程:
DELIMITER //CREATE PROCEDURE GetAllUsers() BEGIN SELECT id, name, email FROM users; END //
DELIMITER ;
在存储过程中执行动态或条件 SQL
存储过程支持变量、流程控制(如 IF、LOOP),但直接拼接动态 SQL 需结合 PREPARE 和 EXECUTE 语句:
DELIMITER //CREATE PROCEDURE GetUserById(IN user_id INT) BEGIN DECLARE query_text TEXT; SET query_text = CONCAT('SELECT * FROM users WHERE id = ', user_id);
PREPARE stmt FROM query_text; EXECUTE stmt; DEALLOCATE PREPARE stmt;END //
DELIMITER ;
调用方式:
CALL GetUserById(1);
传参与参数类型
存储过程支持三种参数模式:
- IN:输入参数,调用时传入值
- OUT:输出参数,返回结果值
- INOUT:既可输入也可输出
示例:使用 OUT 参数获取计数
DELIMITER //CREATE PROCEDURE GetUserCount(OUT total INT) BEGIN SELECT COUNT(*) INTO total FROM users; END //
DELIMITER ;
-- 调用并查看结果 CALL GetUserCount(@count); SELECT @count;
基本上就这些。定义好后用 CALL 执行,注意权限和 SQL 模式兼容性。合理使用能简化应用层逻辑。不复杂但容易忽略细节,比如 delimiter 设置和动态 SQL 的安全拼接。










