• Mysql存储过程示例以及说明


    MySQL 存储过程是从 MySQL 5.0 开始增加的新功能,目的是数据库 SQL 语言层面的代码封装与重用。

    以下是一个向目标数据库写大量模拟数据的 存储过程 示例:

    DROP PROCEDURE IF EXISTS proc_initData; 
    DELIMITER $
    CREATE PROCEDURE proc_initData()
    BEGIN
        DECLARE i INT DEFAULT 80000;
        WHILE i>0 DO
            insert into SC (sc_id,s_id,c_id,score) value (i, FLOOR(RAND() * 10), FLOOR(RAND() * 10), FLOOR(RAND() * 100));
            SET i = i-1;
        END WHILE;
    END $
    CALL proc_initData();
    
    DELIMITER ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    示例各语句含义详解:

    • DROP PROCEDURE IF EXISTS proc_initData
      查询是否有该存储过程,如果有,停止它
    • DELIMITER $
      定义分隔符为 $ ,因为存储过程语句中含有分隔的语句,避免和存储过程语句本身混淆
    • CREATE PROCEDURE proc_initData()
      创建一个 名为 proc_initData 的存储过程
    • BEGIN
      begin 和 end 是mysql中复合语句的定界符。
    • END $
      结束,自定义的分隔符 $ 表示到这里该语句结束
    • DECLARE i INT DEFAULT 80000;
      定义变量 i 类型为 int,初始默认值为 80000
    • WHILE i>0 DO
      开启循环语句,如果 i 大于0,则执行下面语句
    • insert into SC (sc_id,s_id,c_id,score) value (i, FLOOR(RAND() * 10), FLOOR(RAND() * 10), FLOOR(RAND() * 100));
      写入数据
    • SET i = i-1;
      设置 i 的值,每执行一次对该值进行更新
    • END WHILE;
      循环语句结束
    • CALL proc_initData();
      在定义好该存储过程后,执行调用
    • DELIMITER ;
      恢复分隔符为默认的 ;

    存储过程其他知识点:

    • 查询存储过程
      show procedure status where db='数据库名';
    • 查询存储过程的定义语句
      show create procedure 数据库.存储过程名;
    • 存储过程的参数使用
      存储过程中的参数分别是 in,out,inout三种类型;
      • in代表输入参数(默认情况下为in参数),表示该参数的值必须由调用程序指定。
      • ou代表输出参数,表示该参数的值经存储过程计算后,将out参数的计算结果返回给调用程序。
      • inout代表即时输入参数,又是输出参数,表示该参数的值即可有调用程序制定,又可以将inout参数的计算结果返回给调用程序。
      # (入参类型 变量名 变量类型, ...)
      create procedure proc_initData(in i_int int,  out o_varchar varchar(255))
      
      • 1
      • 2

    对随机数的额外说明

    • FLOOR(n)
      对传入的 数值n 进行向下取整
    • RAND(seed)
      生成一个 0~1 的随机数, 传入的参数seed是随机数种子,一般可以不用传

    由 floor() 和 rand() 配合使用可以随机生成任何区域值:

    # 生成一个 0 ~ 100 的数
    floor(rand()*100)
    # 生成一个 0 ~ 12 的数
    floor(rand()*12)
    # 生成一个 5~95 的数
    floor(5+rand()*90)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    MES系统是怎样实现生产调度的?
    常用设计模式总结 + 实例
    【mq】从零开始实现 mq-06-消费者心跳检测 heartbeat
    mysql简单备份和恢复
    一文搞懂Vue3中如何使用ref获取元素节点?
    c语言贪吃蛇游戏
    机器人微控制器编程(CoCube)-破除定势
    Win11(便签)便笺打开,解决登录异常,快捷键
    视联网四方面优势引领行业技术
    带团队后的日常思考(十二)
  • 原文地址:https://blog.csdn.net/weixin_43269166/article/details/126587493