博客
关于我
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批量update操作时出现锁表
    查看>>
    MYSQL批量UPDATE的两种方式
    查看>>
    mysql批量修改字段名(列名)
    查看>>
    MySQL批量插入数据遇到错误1213的解决方法
    查看>>
    mysql技能梳理
    查看>>
    MySQL报Got an error reading communication packets错
    查看>>
    Mysql报错Can‘t create/write to file ‘/tmp/#sql_3a8_0.MYD‘ (Errcode: 28 - No space left on device)
    查看>>
    MySql报错Deadlock found when trying to get lock; try restarting transaction 的问题解决
    查看>>
    MySQL报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘
    查看>>
    Mysql报错Packet for query is too large问题解决
    查看>>
    mysql报错级别_更改MySQL日志错误级别记录非法登陆(Access denied)
    查看>>
    Mysql报错:too many connections
    查看>>
    MySQL报错:无法启动MySQL服务
    查看>>
    mysql授权用户,创建用户名密码,授权单个数据库,授权多个数据库
    查看>>
    mysql排序查询
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    MySQL排序的艺术:你真的懂 Order By吗?
    查看>>
    Mysql推荐书籍
    查看>>
    Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据
    查看>>
    MYSQL搜索引擎
    查看>>