zoukankan      html  css  js  c++  java
  • MySQL如何插入测试数据

    关于插入MySQL测试数据,这里介绍两种方法:

    选择优先级(结合PHP生成测试数据 > 使用存储过程 )

    • 使用存储过程(建议测试数据小于1000条使用该方法)

     具体代码如下:

     创建表:

    1 mysql> create table TB1(
    2     -> id int auto_increment not null,
    3     -> name varchar(30) not null default 5,
    4     -> primary key(id));
    5 Query OK, 0 rows affected (0.02 sec)

     创建存储过程:

     1 mysql> delimiter $
     2 mysql> create procedure testdata()
     3     -> begin
     4     -> declare i int default 1;
     5     -> while(i<=1000) do
     6     -> insert into TB1(name) values(concat("test",i));
     7     -> set i=i+1;
     8     -> end while;
     9     -> end;
    10     -> $
    11 Query OK, 0 rows affected (0.02 sec)
    12 
    13 mysql> delimiter ;

     调用存储过程

    1 mysql> call testdata();
    2 Query OK, 1 row affected (5.13 sec)

     PS:上图可以看出1000条数据的生成消耗了5.13秒,特别的慢!

    • 结合PHP生成测试数据

     testdata.php内容:

     1 <?php
     2 //  使用方法:php testdata.php root 123456
     3 //  第一个参数为数据库用户名,第二个参数为数据库密码
     4 
     5 //  一些设置项
     6 set_time_limit(0);
     7 $_ROWS     = 100000;     # 要插入的行数
     8 $_DATABASE = "DB1";      # 库名
     9 $_TABLE    = "TB1";      # 表名
    10 $_KV       = array(
    11     "name" => "test",    # 字段名 => 字段前缀
    12 );
    13 
    14 $t1 = microtime(true);
    15 //  生成SQL语句
    16 $sqlString = "INSERT INTO {$_TABLE} (". implode(",", array_keys($_KV))  .") VALUES ";
    17 $arr = $valArr = array();
    18 while ($_ROWS > 0) {
    19     foreach($_KV as $k => $v) {
    20         $arr[] = $v.$_ROWS;
    21     }
    22     $valArr[] = "('". implode("','", $arr) . "')";
    23     $_ROWS--;
    24     $arr = array();
    25 }
    26 $sqlString .= implode(',', array_values($valArr)) . ";";
    27 
    28 //  导入数据库
    29 list($scriptname, $dbuser, $dbpassword) = $argv;
    30 $con = mysqli_connect("127.0.0.1", $dbuser, $dbpassword, $_DATABASE) or die("error connecting") ;;
    31 mysqli_query($con, $sqlString);
    32 mysqli_close($con);
    33 $t2 = microtime(true);
    34 echo round($t2-$t1, 3) . " sec
    ";

      

     执行脚本

    1 [root@desktop]# php testdata.php root 123456
    2 0.48 sec

     PS:通过两种方法的对比,使用PHP脚本导入100000条测试数据只花了0.48秒,可以看出该方法执行的速度远比使用存储过程快。

  • 相关阅读:
    转 -- Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)
    转 -- 求一个二进制数值中的1的个数
    ubuntu 搭建 samba 服务器
    64bit ubuntu 安装32bit的软件
    ubuntu 添加管理员账户
    #ifdef 和 #if defined 的区别 -- 转
    xming + putty 搭建远程图形化ssh访问ubuntu 14.04
    ubuntu 安装bochs
    强制类型转换中的精度丢失
    转载 -- 如何判断Javascript对象是否存在
  • 原文地址:https://www.cnblogs.com/benny-peng/p/8280355.html
Copyright © 2011-2022 走看看