生成百万数据量,需要三步
一、创建对应的数据库
ps:因为系统的不同,复制过后,要把空格,删掉,再添加。不然会出现语法错误
CREATE TABLE `NewTable` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`age` int(11) NOT NULL ,
`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`comment` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=1
ROW_FORMAT=DYNAMIC
;
二、Yii框架下PHP代码
public function actionMakeSql(){
$i=1;
$user_name= [
'夏候望',
'劲冥石',
'济川烨',
'欧阳劲',
'林风眠',
'伍忘因',
'赵紫颖',
'月明溪',
'风川鸣',
'欣月馨'
];
$email=[
"@qq.com",
"@163.com",
"@gmail.com",
"@126.com",
"@yahoo.com",
"@xinlang.com",
"@vip.com",
"@foxmail.com"
];
while ($i<2000) {
$name_key = array_rand($user_name);
$email_key = array_rand($email);
$model = new BillionSql();
$model->name = $user_name[$name_key];
$model->phone = (string)rand(13202000000, 13202007109);
$model->age = rand(20, 60);
$model->email = $this->getRandomString(rand(5, 10)) . $email[$email_key];
$model->comment = (string)$i;
$status = $model->save();
if (!$status) {
print_r($model);
break;
}
$i++;
}
}
private function getRandomString($len,$char=null){
if (is_null($char)){
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
}
//随机数播种生成器
//根据参数生成随机数,mt_rand()使用
//php4.2之后就自动播种,已淘汰
mt_srand(10000000*(double)microtime());
for ($i=0,$str=" ",$lc=strlen($chars)-1;$i<$len;$i++){
$str.=$chars[mt_rand(0,$lc)];
}
return $str;
}
三、数据工具,sql命令复制数据生成表
因为性能问题,php代码生成数据量2000条基本,再多会卡
insert into test(name,age,email,phone,comment) select name,age,email,phone,comment from test;