博客
关于我
MySQL存储过程入门
阅读量:789 次
发布时间:2023-02-12

本文共 2330 字,大约阅读时间需要 7 分钟。

MySQL 存储过程详解

存储过程是一种用于数据库中执行特定功能的可编程对象。它通过存储一系列SQL语句并在数据库中编译后执行,从而提升数据处理效率。


存储过程的特点

存储过程具有以下优点:

  • 简化操作:将重复性操作封装到存储过程中,减少对数据库直接操作的频率,提高代码复用性。
  • 批量处理:通过结合SQL和循环,减少网络流量,提升处理性能。
  • 统一接口:提供标准化的调用接口,便于管理和维护,确保数据安全。
  • 不过,存储过程也存在一些缺点:

  • 移植困难:不同数据库之间的存储过程语法差异较大,迁移数据库时可能需要重新编写存储过程。
  • 管理复杂性:过多的业务逻辑集中在存储过程中,难以进行分层管理,维护成本较高。
  • 需要注意的是,MySQL的存储过程功能相对较弱,主要用于处理对性能要求较高的场景。


    孿经创建与调用

    1. 创建存储过程

    存储过程的创建涉及以下关键元素:

    • 名称:存储过程的唯一标识名。
    • 参数:定义输入、输出或输入输出参数,参数类型包括INT、VARCHAR等。
    • :存储过程的逻辑代码,包括SELECT、INSERT、UPDATE等DML语句,以及控制结构如IF、CASE、LOOP等。

    创建语法示例:

    DELIMITER ;;CREATE DEFINER='root'@'localhost' PROCEDURE `proc_adder`(IN a INT, IN b INT, OUT sum INT)BEGIN    DECLARE c INT;    IF a IS NULL THEN SET a = 0 END IF;    IF b IS NULL THEN SET b = 0 END IF;    SET sum = a + b;END;DELIMITER ;

    注意事项:

  • DELIMITER:用于临时修改语句分隔符,避免被客户端解释。
  • DEFINER:指定存储过程的创建者。
  • 参数模式:使用INOUTINOUT定义参数类型。
  • 2. 调用存储过程

    调用存储过程的语法简单,格式为:

    CALL 存储过程名([参数列表]);

    示例:

    call proc_adder(22, 33);

    3. 存储过程体

    存储过程的逻辑代码需要遵循以下规则:

    • 使用BEGINEND标记代码块。
    • 每条语句必须以分号结束。
    • 支持嵌套语句,标签可以增强代码可读性。

    代码示例:

    BEGIN    DELETE FROM student WHERE id = p_id;END;

    存储过程的参数

    存储过程的参数可以是输入、输出或输入输出类型。建议:

    • 输入参数使用IN模式。
    • 输出参数使用OUT模式。
    • 避免使用INOUT模式,除非必要。

    示例:

    • 输入参数
    CREATE PROCEDURE pro_student(IN p_id INT)BEGIN    DELETE FROM student WHERE id = p_id;END;
    • 输出参数
    CREATE PROCEDURE pro_student(IN sname VARCHAR(10), OUT age INT, OUT sid INT)BEGIN    SELECT a.age, s.id INTO age, sid    FROM students s    INNER JOIN ages a ON s.age_id = a.id    WHERE s.sname = sname;END;
    • 输入输出参数
    CREATE PROCEDURE pro_param(INOUT p_inout INT)BEGIN    SET p_inout = p_inout * 2;END;

    存储过程的控制语句

    存储过程支持多种控制语句,包括IFCASELOOP等,能够实现复杂的逻辑判断和循环操作。

    示例:

    • IF语句
    CREATE PROCEDURE proc_if(IN type INT)BEGIN    DECLARE c VARCHAR(500);    IF type = 0 THEN        SET c = '参数为0';    ELSEIF type = 1 THEN        SET c = '参数为1';    ELSE        SET c = '参数为其他值';    END IF;    SELECT c;END;
    • CASE语句
    CREATE PROCEDURE proc_case(IN type INT)BEGIN    DECLARE c VARCHAR(500);    CASE type        WHEN 0 THEN            SET c = '参数为0';        WHEN 1 THEN            SET c = '参数为1';        ELSE            SET c = '参数为其他值';    END CASE;    SELECT c;END;
    • 循环语句
    CREATE PROCEDURE proc_while(IN n INT)BEGIN    DECLARE i INT, s INT;    SET i = 0, s = 0;    WHILE i <= n DO        SET s = s + i;        SET i = i + 1;    END WHILE;    SELECT s;END;

    知识点总结

    MySQL存储过程提供了一种高效的数据处理方式,适合处理复杂的业务逻辑和高频操作。通过合理使用存储过程,可以显著提升数据库性能和系统稳定性。

    转载地址:http://irbfk.baihongyu.com/

    你可能感兴趣的文章
    mysql交互式连接&非交互式连接
    查看>>
    MySQL什么情况下会导致索引失效
    查看>>
    Mysql什么时候建索引
    查看>>
    MySql从入门到精通
    查看>>
    MYSQL从入门到精通(一)
    查看>>
    MYSQL从入门到精通(二)
    查看>>
    mysql以下日期函数正确的_mysql 日期函数
    查看>>
    mysql以服务方式运行
    查看>>
    mysql优化--索引原理
    查看>>
    mysql优化概述(范式.索引.定位慢查询)
    查看>>
    MySQL优化配置详解
    查看>>
    Mysql优化高级篇(全)
    查看>>
    mysql会员求积分_MySql-统计所有会员的最高前10次的积分和
    查看>>
    mysql会对联合索性排序优化_MySQL索引优化实战
    查看>>
    MySQL作为服务端的配置过程与实际案例
    查看>>
    Mysql使用命令行备份数据
    查看>>
    MySQL保姆级教程(SQL语法基础篇)从小白到高手的进阶指南,收藏这一篇就够了
    查看>>
    MySQL修改root密码的多种方法
    查看>>
    MySQL修改密码报错ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘localhost‘
    查看>>
    Mysql全局优化参数
    查看>>