mysql使用存储过程实现插入大规模量模拟数据

3390阅读 0评论2016-05-31 douyaqiang123
分类:Mysql/postgreSQL

        有些时候对于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了,毕竟关系型数据库处理的关系能力有限。
上一篇:盘点linux系统中的12条性能调优命令。
下一篇:KeepAlived + mysqlMM高可用 安装配置