• 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
  • 相关阅读:
    opencv-图像变换:傅里叶变换
    基于SkeyeVSS系统实现政府综合性视频监控平台管理解决方案
    谈谈制定数据治理战略路线图的方法
    OpenGL原理与实践——核心模式(五):颜色、基础光照、Phong模型、材质与光
    jetson设置
    Spring事务(Transaction)管理高级篇一栈式解决开发中遇到的事务问题
    echarts图例过长翻页
    Neo4J超详细专题教程,快来收藏起来吧
    git cherry-pick
    数据结构(高阶)—— 红黑树
  • 原文地址:https://blog.csdn.net/weixin_43269166/article/details/126587493