博客
关于我
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 字段类型类型
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    mysql 存在update不存在insert
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>
    mysql 添加索引
    查看>>
    mysql 网络目录_联机目录数据库
    查看>>
    MySQL 聚簇索引&&二级索引&&辅助索引
    查看>>
    Mysql 脏页 脏读 脏数据
    查看>>
    mysql 自增id和UUID做主键性能分析,及最优方案
    查看>>
    Mysql 自定义函数
    查看>>
    mysql 行转列 列转行
    查看>>
    Mysql 表分区
    查看>>
    mysql 表的操作
    查看>>
    MySQL 触发器
    查看>>
    mysql 让所有IP访问数据库
    查看>>
    mysql 记录的增删改查
    查看>>