MySQL如何插入测试数据
关于插入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如何插入测试数据的更多相关文章
- mysql批量插入测试数据
一.建表语句 use test; create table student( Sno ) NOT NULL COMMENT '学号', Sname ) NOT NULL COMMENT '姓名', S ...
- mysql批量插入简单测试数据
mysql批量插入简单测试数据 # 参考网址: https://www.2cto.com/database/201703/618280.html 1.mysql创建测试表 CREATE TABLE ` ...
- MYSQL批量插入数据库实现语句性能分析
假定我们的表结构如下 代码如下 CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value ...
- MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】
假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...
- mysql 添加大量测试数据
mysql 添加大量测试数据 场景 针对于大量测试数据插入,检测sql执行速度 第一步:建表 // 测试表 CREATE TABLE user ( id int(11) NOT NULL AUTO_I ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- mysql不能插入中文
mysql不能插入中文 解决办法: 1.打开终端,连接数据库 mysql -u root -p; 2.输入 satus; 查看状态 3.输入 set char set 'gbk'; 4.如果是已有的 ...
- Mysql大量插入随机数据方法--存储过程
创建测试表: mysql)); 创建存储过程: mysql> delimiter // mysql> create procedure rand_data(in num int) -> ...
- MySQL大批量插入数据
MySQL大批量插入数据 1. 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据. ALTER TABLE tblname DISABLE KEYS; loading the ...
随机推荐
- 自学Python5.1-模块简介
模块简介 在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的.那么在Python中 ...
- 实现我博客旁边的线条效果 html canvas-nest.js 源码
canvas-nest.js 这个js文件可以用来实现炫酷的线条与鼠标进行交互的功能,具体效果如图所示 js具体源码如下: /** * Copyright (c) 2016 hustcc * Lice ...
- AMD与CMD区别
区别: 1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行.不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同).CMD 推崇 as lazy as ...
- iOS Xcode及模拟器SDK下载
原文: Xcode及模拟器SDK下载 如果你嫌在 App Store 下载 Xcode 太慢,你也可以选择从网络上下载: Xcode下载(Beta版打的包是不能提交到App Store上的) 绝对官方 ...
- 页面重绘(repaint)和回流(reflow)
前言 页面显示到浏览器上的过程: 1.1.生成一个DOM树. 浏览器将获取到的HTML代码解析成1个DOM树,包含了所有标签,包括display:none和动态添加的节点. 1.2.生成样式结构体. ...
- springboot学习(三)————使用HttpMessageConverter进行http序列化和反序列化
以下内容,如有问题,烦请指出,谢谢! 对象的序列化/反序列化大家应该都比较熟悉:序列化就是将object转化为可以传输的二进制,反序列化就是将二进制转化为程序内部的对象.序列化/反序列化主要体现在程序 ...
- xamarin android如何监听单击事件
在xamarin android单击事件是最基础的事情,看过菜鸟上的android教程时,java写的都是监听事件,为一个按钮,单选按钮.多选按钮的单击事件有三种,前面两种用的非常普遍,也很简易,我这 ...
- BZOJ 4818 SDOI2017 序列计数
刚出炉的省选题,还是山东的. 自古山东出数学和网络流,堪称思维的殿堂,比某地数据结构成风好多了. 废话不说上题解. 1.题面 求:n个数(顺序可更改),值域为[1,m],和为p的倍数,且这些数里面有质 ...
- 扩展Microsoft Graph数据结构(开放扩展)
作者:陈希章 发表于 2018年1月2日 前言 Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来 ...
- ES6 函数的扩展3
箭头函数 基本用法 ES6允许使用"箭头"(=>)定义函数 var f = v => v; 上面的箭头函数等同于: var f = function(v) { retu ...