MySQL存储过程如何赋值:核心方法与实例详解
在MySQL存储过程中,赋值操作主要通过SET语句、SELECT ... INTO语句以及存储过程参数传递来实现,这些方法是存储过程中变量管理和数据操作的基础,掌握正确的赋值方式,能够有效提升存储过程的编写效率和执行性能。
使用SET语句赋值
SET语句是存储过程中最常用的赋值方式,适用于为变量赋予固定值、表达式结果或其他变量的值。

DELIMITER //
CREATE PROCEDURE example_set()
BEGIN
DECLARE var1 INT;
DECLARE var2 VARCHAR(50);
-- 直接赋值
SET var1 = 100;
-- 通过表达式赋值
SET var1 = var1 + 50;
-- 为字符串变量赋值
SET var2 = 'Hello, MySQL!';
END //
DELIMITER ;
使用SELECT...INTO语句赋值
SELECT ... INTO语句可将查询结果直接赋值给变量,适用于从数据库表中获取数据。
DELIMITER //
CREATE PROCEDURE example_select_into()
BEGIN
DECLARE emp_name VARCHAR(100);
DECLARE emp_salary DECIMAL(10,2);
-- 将查询结果赋值给变量
SELECT name, salary INTO emp_name, emp_salary
FROM employees
WHERE id = 1;
-- 使用变量进行后续操作
SELECT CONCAT(emp_name, '的薪资是:', emp_salary) AS info;
END //
DELIMITER ;
注意:SELECT...INTO语句必须确保查询结果返回单行数据,否则会触发错误。
存储过程参数赋值
存储过程的参数分为三种类型,可在调用时直接赋值:
- IN参数(默认):输入参数,调用时传入值
- OUT参数:输出参数,可在存储过程中赋值并返回
- INOUT参数:既可输入又可输出的参数
DELIMITER //
CREATE PROCEDURE calculate_bonus(
IN base_salary DECIMAL(10,2),
OUT bonus DECIMAL(10,2),
INOUT total_income DECIMAL(10,2)
)
BEGIN
-- 计算奖金(基础薪资的20%)
SET bonus = base_salary * 0.2;
-- 计算总收入
SET total_income = base_salary + bonus;
END //
DELIMITER ;
-- 调用存储过程
SET @total = 5000;
CALL calculate_bonus(5000, @bonus, @total);
SELECT @bonus, @total; -- 查看结果
特殊赋值场景与注意事项
多变量同时赋值
MySQL支持使用单个SET语句为多个变量赋值:
SET var1 = 10, var2 = 20, var3 = 'test';
默认值赋值
在声明变量时可直接赋默认值:
DECLARE counter INT DEFAULT 0; DECLARE created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
错误处理与赋值
结合异常处理确保赋值安全:
DECLARE EXIT HANDLER FOR NOT FOUND
BEGIN
-- 当SELECT...INTO未找到数据时的处理
SET @error_msg = '未找到相关数据';
END;
性能优化建议
- 避免在循环中频繁使用SELECT...INTO,可先批量查询到临时表
- 对于复杂计算,优先使用SET语句而非多次查询
- 合理选择参数类型,减少不必要的数据复制
实际应用示例
以下是一个完整的存储过程示例,演示了多种赋值方式的综合应用:
DELIMITER //
CREATE PROCEDURE process_employee_data(
IN dept_id INT,
OUT avg_salary DECIMAL(10,2),
OUT emp_count INT
)
BEGIN
DECLARE temp_salary DECIMAL(10,2);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR
SELECT salary FROM employees WHERE department_id = dept_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 初始化变量
SET avg_salary = 0;
SET emp_count = 0;
SET temp_salary = 0;
OPEN cur;
read_loop: LOOP
FETCH cur INTO temp_salary;
IF done THEN
LEAVE read_loop;
END IF;
-- 累加工资和计数
SET avg_salary = avg_salary + temp_salary; 未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/17584.html发布于:2026-09-18





