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