博客
关于我
MySQL存储过程入门
阅读量:788 次
发布时间: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中的concat函数,concat_ws函数,concat_group函数之间的区别
    查看>>
    MySQL中的count函数
    查看>>
    MySQL中的DB、DBMS、SQL
    查看>>
    MySQL中的DECIMAL类型:MYSQL_TYPE_DECIMAL与MYSQL_TYPE_NEWDECIMAL详解
    查看>>
    MySQL中的GROUP_CONCAT()函数详解与实战应用
    查看>>
    MySQL中的IO问题分析与优化
    查看>>
    MySQL中的ON DUPLICATE KEY UPDATE详解与应用
    查看>>
    mysql中的rbs,SharePoint RBS:即使启用了RBS,内容数据库也在不断增长
    查看>>
    mysql中的undo log、redo log 、binlog大致概要
    查看>>
    Mysql中的using
    查看>>
    MySQL中的关键字深入比较:UNION vs UNION ALL
    查看>>
    MYSQL中频繁的乱码问题终极解决
    查看>>
    Mysql主从不同步
    查看>>
    mysql主从同步及清除信息
    查看>>
    MySQL主从复制几个重要的启动选项
    查看>>
    MySQL主从架构与读写分离实战
    查看>>
    MySQL主从篇:死磕主从复制中数据同步原理与优化
    查看>>
    mysql主从配置
    查看>>
    MySQL之2003-Can‘t connect to MySQL server on ‘localhost‘(10038)的解决办法
    查看>>
    MySQL之DML
    查看>>