zoukankan      html  css  js  c++  java
  • 简单的mysql存储过程

    1.我为啥会学mysql存储过程?

           因为在之前工作不懂存储过程,没有及时发现bug,后面就花一个月的时间学习mysql存储过程,把公司所有的存储过程及其所有表都弄懂了。然而尴尬的是,在一次面试时面试官要我手写一个存储过程,我既然写不出来。

    2.很多东西学会了不经常用就容易忘记,建议大家学会的东西时不时拿出来练练手。

    下面就是我写来玩的存储过程

    1)创建两张表

    CREATE TABLE `mtfan` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(60) DEFAULT NULL COMMENT '姓名',
      `money` varchar(60) DEFAULT NULL COMMENT '钱',
      `date_1` date DEFAULT NULL COMMENT '时间',
      PRIMARY KEY (`id`)
    );

    CREATE TABLE `mtfan01` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `name` varchar(60) DEFAULT NULL COMMENT '姓名',
      `money` varchar(60) DEFAULT NULL COMMENT '钱',
      `date_1` date DEFAULT NULL COMMENT '时间',
      PRIMARY KEY (`id`)
    );

    2)创建一个存储过程,向mtfan表里插入数据

    CREATE  PROCEDURE `inout_param`()
    BEGIN
            declare i int default 0;
            declare money int ;

            loop_label: loop
        set money = FLOOR( 500 + RAND() * (1000 - 500));

        INSERT INTO mtfan (name,money,date_1) VALUES('小明',money,'2018-07-30');
            INSERT INTO mtfan (name,money,date_1) VALUES('小红',money,'2018-07-30');
            INSERT INTO mtfan (name,money,date_1) VALUES('小猪',money,'2018-07-30');
            INSERT INTO mtfan (name,money,date_1) VALUES('小李',money,'2018-07-30');
            INSERT INTO mtfan (name,money,date_1) VALUES('小国',money,'2018-07-30');
            
        set i=i+1;
            if i>=5 then
               leave loop_label;
            end if;
        end loop;
    END;

    3)创建一个游标存储过程,把mtfan表里的数据传给mtfan01表

    CREATE  PROCEDURE `cursor_example`()
    BEGIN
             #定义函数
         DECLARE cnname VARCHAR(20) DEFAULT '';
         DECLARE cnmoney INT DEFAULT 0;  
         DECLARE date DATETIME DEFAULT '2018-08-01';  
         DECLARE done INT DEFAULT 0;
             #创建一个游标
         DECLARE cur1 CURSOR FOR SELECT name,money,date_1 FROM mtfan WHERE date_1 = '2018-07-10';
             #设置变量 done=1时跳出循环
         DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
             #打开游标
         OPEN cur1;
             #创建一个loop循环
         emp_loop: LOOP
                     #把游标查询得到的值传给对应的函数
             FETCH cur1 INTO cnname,cnmoney,date;
                     #满足条件终止循环
             IF done=1 THEN  
                 LEAVE emp_loop;
                     #if结束
             END IF;
                     #sql插入语句
                     INSERT INTO mtfan01 (name,money,date_1) VALUES(cnname,cnmoney,date);
             #循环结束
         END LOOP emp_loop;
             #关闭游标
         CLOSE cur1;  
    END;

  • 相关阅读:
    日志记录到txt文件
    使用NuGet安装EntityFramework4.2
    Redis 安装与简单示例 <第一篇>
    时间加减时间段(年、月、日、分、秒)
    控件属性设置
    window.showModalDialog 与window.open传递参数的不同?
    如何进行js动态生成option?如何实现二级连动?
    System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'XXX' 数据库不同
    如何激发手机的高分辨率
    PHP--正则表达式和样式匹配--小记
  • 原文地址:https://www.cnblogs.com/mtfan01/p/9441904.html
Copyright © 2011-2022 走看看