加入计数以及统计运行时间
conn.php文件内容
PHP连接MySQL服务器失败!";
echo "系统错误信息:".mysqli_connect_error();
die(); //中止程序向下运行
}
//(3)选择当前数据库
if(!mysqli_select_db($link,$db_name))
{
echo "
选择数据库{$db_name}失败!
";
die();
}
//(4)设置数据库返回数据字符集
mysqli_set_charset($link,$charset);
1/在foreach中执行数据库语句,简单,但是效率低
500 and dede_archives.typeid = dede_addonimages.typeid order by dede_archives.id desc "; //两个数据表inner join
$result = mysqli_query($link,$sql);//执行,输出结果集
$arrs = mysqli_fetch_all($result,1);
var_dump($arrs);
die();
$jishu = 0 ;//计数初始化
foreach ($arrs as $k => $v) {
$taobaolongid=$v['id'];//获取id;
$taobaolongtitle = $v['title'];
$sql= "update dede_addonimages set taobaolonglink = '$taobaolongtitle' where aid = $taobaolongid";//插入新表
$result = mysqli_query($link,$sql);//执行,输出结果集
echo "ID为:$taobaolongid"." 标题为:$taobaolongtitle"."插入";
echo var_dump($result);
echo "
";
// sleep(1);//延迟3秒执行下一次
$jishu+= 1;//循环次数累加
}
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
echo "
当前页面执行时间为:{$total} 秒";
echo "
总共插入$jishu"."次";
2/使用mysql语法格式来批量添加
上例中sql语法格式
UPDATE book
SET Author = CASE id
WHEN 1 THEN '黄飞鸿'
WHEN 2 THEN '方世玉'
WHEN 3 THEN '洪熙官'
END
WHERE id IN (1,2,3)
$v) {
$ids.= $v["id"].",";//
$vtitle = $v['title'];
//$sql .= sprintf("WHEN %d THEN %s ", $id, $v);
$sql .= " WHEN ".$v['id']." THEN "."'$vtitle'";
}
$ids = rtrim($ids, ",");//去掉最后一个,
$sql .= " END WHERE aid IN ($ids)";
//echo $sql; 查看sql语句
//die();
$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
echo "
当前页面执行时间为:{$total} 秒";
echo "
总共插入$jishu"."次";
使用replace into语法批量 危险 了解 慎重
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点!否则不小心清空大量数据可不是闹着玩的!!!
除了更新的字段,其他都变成默认值了;
replace into 表名l (id,字段1) values (1,'2'),(2,'3'),...(x,'y');//语法格式
$v) {
$vid=$v["id"];
$vtitle = $v['title'];
$sql .= '('.$vid.','."'$vtitle'".')'.',';
}
$sql = rtrim($sql,',');
//echo $sql; //查看sql语句
//die();
$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
echo "
当前页面执行时间为:{$total} 秒";
insert into …on duplicate key update批量更新
insert .. on deplicate udpate保留了所有字段的旧值,再覆盖然后一起insert进去,而replace没有保留旧值,直接删除再insert新值。
从底层执行效率上来讲,replace要比insert .. on deplicate update效率要高,但是在写replace的时候,字段要写全,防止老的字段数据被删除。
replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。
insert into 表名l (id,字段1) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update 字段1=values(字段1);
insert into book (`Id`,`Author`,`CreatedTime`,`UpdatedTime`) values (1,'张飞2','2017-12-12 12:20','2017-12-12 12:20'),(2,'关羽2','2017-12-12 12:20','2017-12-12 12:20') on duplicate key update Author=values(Author),CreatedTime=values(CreatedTime),UpdatedTime=values(UpdatedTime);
insert into tran_test (f1,f2) values ("A3",2),("B3",3) on duplicate key update f2=values(f2);
$v) {
$vid=$v["id"];
$vtitle = $v['title'];
$sql .= '('.$vid.','."'$vtitle'".')'.',';
}
$sql = rtrim($sql,',');
$sql .=" on duplicate key update taobaolonglink=values".'('.'taobaolonglink'.')';
//echo $sql;
$result = mysqli_query($link,$sql);//执行,输出结果集
var_dump($result);
$etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
echo "
当前页面执行时间为:{$total} 秒";