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

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

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

 具体代码如下:

 创建表:

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

 创建存储过程:

 mysql> delimiter $
mysql> create procedure testdata()
-> begin
-> declare i int default 1;
-> while(i<=1000) do
-> insert into TB1(name) values(concat("test",i));
-> set i=i+1;
-> end while;
-> end;
-> $
Query OK, 0 rows affected (0.02 sec) mysql> delimiter ;

 调用存储过程

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

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

  • 结合PHP生成测试数据

 testdata.php内容:

 <?php
// 使用方法:php testdata.php root 123456
// 第一个参数为数据库用户名,第二个参数为数据库密码 // 一些设置项
set_time_limit(0);
$_ROWS = 100000; # 要插入的行数
$_DATABASE = "DB1"; # 库名
$_TABLE = "TB1"; # 表名
$_KV = array(
"name" => "test", # 字段名 => 字段前缀
); $t1 = microtime(true);
// 生成SQL语句
$sqlString = "INSERT INTO {$_TABLE} (". implode(",", array_keys($_KV)) .") VALUES ";
$arr = $valArr = array();
while ($_ROWS > 0) {
foreach($_KV as $k => $v) {
$arr[] = $v.$_ROWS;
}
$valArr[] = "('". implode("','", $arr) . "')";
$_ROWS--;
$arr = array();
}
$sqlString .= implode(',', array_values($valArr)) . ";"; // 导入数据库
list($scriptname, $dbuser, $dbpassword) = $argv;
$con = mysqli_connect("127.0.0.1", $dbuser, $dbpassword, $_DATABASE) or die("error connecting") ;;
mysqli_query($con, $sqlString);
mysqli_close($con);
$t2 = microtime(true);
echo round($t2-$t1, 3) . " sec\r\n";

  

 执行脚本

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

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

MySQL如何插入测试数据的更多相关文章

  1. mysql批量插入测试数据

    一.建表语句 use test; create table student( Sno ) NOT NULL COMMENT '学号', Sname ) NOT NULL COMMENT '姓名', S ...

  2. mysql批量插入简单测试数据

    mysql批量插入简单测试数据 # 参考网址: https://www.2cto.com/database/201703/618280.html 1.mysql创建测试表 CREATE TABLE ` ...

  3. MYSQL批量插入数据库实现语句性能分析

    假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...

  4. MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】

    假定我们的表结构如下 代码如下   CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...

  5. mysql 添加大量测试数据

    mysql 添加大量测试数据 场景 针对于大量测试数据插入,检测sql执行速度 第一步:建表 // 测试表 CREATE TABLE user ( id int(11) NOT NULL AUTO_I ...

  6. MAC下 mysql不能插入中文和中文乱码的问题总结

    MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...

  7. mysql不能插入中文

    mysql不能插入中文 解决办法: 1.打开终端,连接数据库  mysql -u root -p; 2.输入 satus; 查看状态 3.输入 set char set 'gbk'; 4.如果是已有的 ...

  8. Mysql大量插入随机数据方法--存储过程

    创建测试表: mysql)); 创建存储过程: mysql> delimiter // mysql> create procedure rand_data(in num int) -> ...

  9. MySQL大批量插入数据

    MySQL大批量插入数据 1. 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据. ALTER  TABLE  tblname  DISABLE  KEYS; loading  the  ...

随机推荐

  1. url_for()中的坑,url_for操作对象是函数,而不是route里的路径

    url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径. url_for操作对象是函数,而不是route里的路径.

  2. VUE-CLI Vue安装及开发,npm run build无法查看项目的问题

    Vue-cli 本地安装vue项目 需要安装node.js,用node命令行npm的方式安装Vue 步骤: 1.进入项目地址安装 npm install vue-cli -g 2.初始化一下 ESli ...

  3. .Net 异步方法, await async 使用

    最近朋友问起await  和 async第一次听说这个await ,就查了一下这个await使用在于 异步方法async 中,中文意思就是等待,经过一系列的百度参考简单的明白了这个东西的意思,  异步 ...

  4. idea和Webstorm上使用git和github,码云

    由于之前一直使用svn,现在项目使用git,顾根据网上找的学习资料,自己梳理了下,收获蛮多,这里做个记录,如果能帮助到您那是最好不过的. 1.大致步骤 使用工具:idea,github,码云 webs ...

  5. spring boot https --restful接口篇

    我们写的接口默认都是http形式的,不过我们的接口很容易被人抓包,而且一抓全是明文的挺尴尬的 spring boot配置https生成证书大的方向有3种: 1.利用keytool自己生成证书 2.从免 ...

  6. sqlserver 存储过程 递归查询分组+hierarchyid重建会员关系

    CREATE PROCEDURE [dbo].[GetGroupInfo] @s_code NVARCHAR() = --会员卡号 AS BEGIN declare @p int; --查询唯一性结果 ...

  7. IOS学习2——Xcode快捷键大全

    转载自:图文解释XCode常用快捷键的使用 刚开始用Xcode是不是发现以前熟悉的开发环境的快捷键都不能用了?怎么快捷运行,停止,编辑等等.都不一样了.快速的掌握这些快捷键,能提供开发的效率. 其实快 ...

  8. iOS支付宝支付相关问题

    支付宝实现以及相关问题:http://www.jianshu.com/p/f81578954974 1.支付宝支付流程 1.用户点击支付2.客户端请求服务器用户支付3.服务器接收请求生成金额订单等要给 ...

  9. UIImage类方法总结及UIImage生成方法对比

    http://mp.weixin.qq.com/s/A900w0Y5pGjuaB4j9Os9ww1.UIImage 生成方法的对比 Apple官方的文档为生成一个UIImage对象提供了两种方法: 1 ...

  10. wincc flexable变量组态

    1.变量分类 2.变量组态练习 3.变量组态之前新建一个设备连接取名connect 3.tag1组态bool类型,双击变量弹出下面窗口,具体如下图所示connect表示外部变量 4.组态tag2 5. ...