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;

  • 相关阅读:
    zabbix3.0.4使用percona-monitoring-plugins插件来监控mysql5.6的详细实现过程
    centos6.5环境wget报错Unable to establish SSL connection
    文件缓存tmpfs简单使用
    codis3.2安装报错dashboard.go:369: [PANIC] call rpc create-proxy to dashboard 127.0.0.1:18080 failed的处理
    saltstack自动化运维系列12配置管理安装redis-3.2.8
    反向代理负载均衡之APACHE
    web服务器tomcat入门实战
    haproxy配置基于ssl证书的https负载均衡
    keepalived实现haproxy负载均衡器的高可用
    centos7使用haproxy1.7.5实现反向代理负载均衡实战
  • 原文地址:https://www.cnblogs.com/mtfan01/p/9441904.html
Copyright © 2011-2022 走看看