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秒,可以看出该方法执行的速度远比使用存储过程快。

原文地址:https://www.cnblogs.com/benny-peng/p/8280355.html