Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1527586
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 646
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-26 18:02
个人简介

祸兮福之所倚,福兮祸之所伏

文章分类

全部博文(63)

文章存档

2020年(11)

2019年(10)

2017年(10)

2016年(25)

2015年(7)

我的朋友

分类: Mysql/postgreSQL

2016-04-12 14:20:01

        有些时候对于mysql需要进行一些测试,或者项目上线前的测试,这时候就需要使用一些模拟数据。在即将上线的系统中插入接近线上的真实数据,本来使用shell也是能实现,但是发现shell确实效率太低,根本无法利用服务器资源,所以选择使用mysql的存储过程来实现。
         代码贴出  
        一对一 t_warehouse_order.order_code -->t_warehouse_waybill.order_code   使用游标遍历单字段数据,每2000条一次事务。

点击(此处)折叠或打开

  1. delimiter //
  2. DROP PROCEDURE IF EXISTS insert_waybill;
  3. CREATE PROCEDURE insert_waybill ()
  4. BEGIN
  5.     DECLARE fig INT DEFAULT 0;
  6.     DECLARE var INT DEFAULT 0;
  7.     DECLARE code varchar(10);
  8.     DECLARE sw int default 0;
  9.     DECLARE yb01 cursor FOR select order_code from t_warehouse_order;
  10.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET fig=1;
  11.     open yb01;
  12.     start transaction;
  13.     loop_lable01:LOOP
  14.     FETCH yb01 INTO code;
  15.      if fig=1 then
  16.       LEAVE loop_lable01;
  17.      end if;
  18.     INSERT INTO t_warehouse_waybill ( id,order_code VALUES  ( var,code);
  19.        set sw=sw+1;
  20.        set var=var+1;
  21.          if (sw%2000=0) then
  22.               commit;
  23.           start transaction;
  24.          end if;
  25.     end LOOP loop_lable01;
  26.      commit;
  27.     close yb01;

  28. END
  29. //
  30. delimiter ;
        一对多比例是1:40  使用嵌套循环 加双游标 

点击(此处)折叠或打开

  1. delimiter //
  2. DROP PROCEDURE IF EXISTS packwaybill;
  3. CREATE PROCEDURE packwaybill ()
  4. BEGIN
  5.     DECLARE kig INT DEFAULT 0;
  6.     DECLARE wano varchar(20);
  7.     DECLARE pkno varchar(20);
  8.     DECLARE k INT DEFAULT 0;
  9.     DECLARE sw int default 0;
  10.     DECLARE wa01 cursor FOR select waybill_no from t_warehouse_waybill;
  11.     DECLARE pk01 cursor FOR select package_no from t_warehouse_package;
  12.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET kig=1;
  13.     open pk01;
  14.     open wa01;
  15.     start transaction;
  16.     loop_lable01:LOOP
  17.     FETCH pk01 INTO pkno;
  18.      if kig=1 then
  19.       LEAVE loop_lable01;
  20.      end if;
  21.      set k=0 ;
  22.      while k<40 do
  23.     fetch wa01 into wano;
  24.     INSERT INTO t_warehouse_package_relation_waybill (package_no,way_bill_no)
  25.          values ( pkno,wano);
  26.        set sw=sw+1;
  27.        set k=k+1;
  28.          end while;
  29.          if (sw%2000=0) then
  30.               commit;
  31.           start transaction;
  32.          end if;
  33.     end LOOP loop_lable01;
  34.      commit;
  35.     close wa01;
  36.     close pk01;

  37. END
  38. //
  39. delimiter ;
     要是有更多更复杂的数据关系建议考虑nosql了,毕竟关系型数据库处理的关系能力有限。
阅读(2565) | 评论(0) | 转发(1) |
0

上一篇:mysql explain分析

下一篇:mysql运行状态查看

给主人留下些什么吧!~~