首页 > Mysql > Mysql 存储过程教程

Mysql 存储过程教程

2025-03-24 11:17:09

MySQL 存储过程是一组为了完成特定任务而预先编译好的 SQL 语句集合,存储在数据库中,用户可以通过指定存储过程的名称并给出参数(如果该存储过程带有参数)来执行它。以下是关于 MySQL 存储过程的详细教程:

1. 创建存储过程

语法

DELIMITER //

CREATE PROCEDURE procedure_name([parameter_list])
BEGIN
    -- 存储过程体
    SQL_statements;
END //

DELIMITER ;

在上述语法中:

  • DELIMITER:用来改变语句分隔符,因为存储过程中可能包含多个 SQL 语句,每个语句通常以分号 ; 结尾,为了让 MySQL 正确识别存储过程的开始和结束,需要临时改变分隔符。
  • CREATE PROCEDURE:用于创建存储过程。
  • procedure_name:存储过程的名称。
  • parameter_list:可选参数列表,参数可以有三种类型:IN(输入参数)、OUT(输出参数)、INOUT(既可以输入也可以输出)。
  • BEGIN 和 END:用于界定存储过程体的开始和结束。

示例

下面创建一个简单的存储过程,用于查询 employees 表中的所有记录:

DELIMITER //

CREATE PROCEDURE GetAllEmployees()
BEGIN
    SELECT * FROM employees;
END //

DELIMITER ;

2. 调用存储过程

使用 CALL 语句来调用存储过程。

CALL procedure_name([parameter_values]);

对于上面创建的 GetAllEmployees 存储过程,调用方式如下:

CALL GetAllEmployees();

3. 带有参数的存储过程

输入参数

输入参数用于向存储过程传递值。以下是一个带有输入参数的存储过程示例,用于根据员工 ID 查询员工信息:

DELIMITER //

CREATE PROCEDURE GetEmployeeById(IN emp_id INT)
BEGIN
    SELECT * FROM employees WHERE id = emp_id;
END //

DELIMITER ;

调用该存储过程:

CALL GetEmployeeById(1);

输出参数

输出参数用于从存储过程中返回值。以下是一个带有输出参数的存储过程示例,用于返回员工表中的记录总数:

DELIMITER //

CREATE PROCEDURE GetEmployeeCount(OUT emp_count INT)
BEGIN
    SELECT COUNT(*) INTO emp_count FROM employees;
END //

DELIMITER ;

调用该存储过程并获取输出参数的值:

SET @count = 0;
CALL GetEmployeeCount(@count);
SELECT @count;

输入输出参数

输入输出参数既可以接收输入值,也可以返回修改后的值。以下是一个带有输入输出参数的存储过程示例,用于将输入的数值加倍:

DELIMITER //

CREATE PROCEDURE DoubleValue(INOUT num INT)
BEGIN
    SET num = num * 2;
END //

DELIMITER ;

调用该存储过程:

SET @value = 5;
CALL DoubleValue(@value);
SELECT @value;

4. 删除存储过程

使用 DROP PROCEDURE 语句删除存储过程。

DROP PROCEDURE IF EXISTS procedure_name;

例如,删除 GetAllEmployees 存储过程:

DROP PROCEDURE IF EXISTS GetAllEmployees;

5. 存储过程中的控制结构

IF 语句

IF 语句用于根据条件执行不同的 SQL 语句。以下是一个使用 IF 语句的存储过程示例,根据员工的薪水判断其薪资等级:

DELIMITER //

CREATE PROCEDURE GetSalaryGrade(IN emp_salary DECIMAL(10, 2), OUT grade VARCHAR(10))
BEGIN
    IF emp_salary > 5000 THEN
        SET grade = 'High';
    ELSEIF emp_salary > 2000 THEN
        SET grade = 'Medium';
    ELSE
        SET grade = 'Low';
    END IF;
END //

DELIMITER ;

调用该存储过程:

SET @salary = 3000;
CALL GetSalaryGrade(@salary, @grade);
SELECT @grade;

WHILE 循环

WHILE 循环用于重复执行一组 SQL 语句,直到满足指定的条件为止。以下是一个使用 WHILE 循环的存储过程示例,计算从 1 到 10 的整数之和:

DELIMITER //

CREATE PROCEDURE CalculateSum(OUT total INT)
BEGIN
    DECLARE i INT DEFAULT 1;
    SET total = 0;
    WHILE i <= 10 DO
        SET total = total + i;
        SET i = i + 1;
    END WHILE;
END //

DELIMITER ;

调用该存储过程:

CALL CalculateSum(@sum);
SELECT @sum;

通过以上步骤,你可以掌握 MySQL 存储过程的基本创建、调用、参数使用以及控制结构的使用方法。存储过程可以提高 SQL 代码的复用性和执行效率,适用于复杂的业务逻辑处理。

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top