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;

  • 相关阅读:
    影响历史进程的三只苹果
    C语言实现的RSA算法程序(使用GMP)
    C++实现的大整数分解Pollard's rho算法程序
    Java实现的大整数分解Pollard's rho算法程序
    素性测试算法
    素性测试AKS算法程序
    C++实现的Miller-Rabin素性测试程序
    为什么天朝互联网的三巨头是BAT
    KMP模式匹配算法程序(Python,C++,C)
    I00014 汉若塔问题的C++程序
  • 原文地址:https://www.cnblogs.com/mtfan01/p/9441904.html
Copyright © 2011-2022 走看看