根据某个条件,插入一条数据;
满足这个条件的数据共有5684条,所以新增加的数据也有5684条,按之前的写法,一条条插入,得有个5684条sql insert info 语句,循环执行这个脚本下来,可能还需要用到队列或者放在linux环境才能顺利执行,毕竟一般web端执行apache会有一个超时的时间限制,即便去掉了这个超时限制,这个脚本执行起来同样慢的不可描述!
不管如何,还是记录一下曾经用过的一条条执行的老办法吧:
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "d**********";
$dbname = "c************";
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
mysqli_set_charset($conn,"utf8");
$check_big_id = "select id from table_name order by id desc limit 1"; //查出最大的记录id
$big_id_result = $conn->query($check_big_id);
while($rows = $big_id_result ->fetch_assoc()) {
$big_id = $rows['id'];
}
$check_list_id = "select* from table_name where pid=4 "; //limit 1000 单条时候需要limit ,批量插入几千条内亲测不需要limit了。
$result = $conn->query($check_list_id);
$list_id_str = '';
$list_id_arr = array();
while($row = $result->fetch_assoc()) {
$big_id++;
//单条插入时:
$list_id = $row['list_id'];
//批量插入时,把list_id组成数组
$list_id_arr[] = array(
"id"=>$big_id,
"list_id"=>$row['list_id'],
"pid"=>8
);
// *********************以下是单条插入***************************//
//排除已录入的记录
$check_list_id_now = "select* from table_name where list_id='{$list_id}' and pid=8 limit 1";
$result_now = $conn->query($check_list_id_now);
if($result_now->num_rows<1){
$insert_sql = " insert into table_name(id,list_id,pid) values('{$big_id}','{$list_id}',8)";
echo "\n";
echo "----*---";
echo $insert_sql;
echo "----*---";
echo "\n";
$conn->query($insert_sql);
//sleep(1);
//这种单条sql插入数据的办法,就会产生几千条insert into 的sql
}
}
?>
批量插入,等于把sql语句组合成:insert into table_name(field1,field2,field3) values("a1","b1","c1"), ("a2","b2","c2"),("a3","b3","c3")······ //注意sql的长度,某些数据库会有限制;
// *********************以下是批量插入***************************//
$sql = "INSERT INTO %s( %s ) values %s ";
$arrValues = array();
foreach ($list_id_arr as $k => $v) { //list_id_arr 就是要插入的数据
$arrValues[$k] = "'".implode("','",array_values($v))."'";
}
$arr_key = array('id','list_id','pid‘);
$sql = @sprintf($sql, 'table_name', "{$split}" . implode("{$split} ,{$split}", $arr_key) . "{$split}", "(" . implode(") , (", array_values($arrValues)) . ")");
//echo $sql;
echo date("Y-m-d H:i:s",time());
echo '---*---';
$results = $conn->query($sql);
var_dump($results);
echo '---**---';
echo date("Y-m-d H:i:s",time());
echo '---*插入数据结束*--’;
exit();
打开执行脚本的页面,
然后···
还没反应过来就执行完了····
太棒了!!!
下面是某大神做的一个时间方面的统计,可以做个参考
以上就是我本次的分享,如果有不到位的地方,敬请谅解和指出!