php大量数据入库怎么处理
程序员文章站
2022-04-17 14:55:06
...
有业务需求需要一次性循环n条数据,插入或更新数据库时,如果单纯的循环,插入/更新,会消耗太多的数据库资源
以下是一种简单的解决方案
数据库的insert是可以批量更新的,当有大量数据循环insert时,可以将数据先保留不执行插入命令,到最后一条时一次性插入,例如tp的addAll()方法; (推荐学习:PHP视频教程)
数据库的update 如果使用case when 的话,也是可以批量更新的。
本文主要讲关于批量insert;
生成一个订单
正常情况的语句为:
INSERT INTO order (`goods_id`,`num`,`price`) VALUES (1,1,'10.00'); //封装成函数 function add_order($goods_id,$num,$price){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); }
假设有一个用户,一次性将购物车的1000个商品结算成订单,生成1000个订单时;
for ($i=0;$i<1000;$i++){ $db->query("INSERT INTO order (`goods_id`,`num`,`price`) VALUES ($goods_id,$num,$price)"); } //这样的话会导致服务器资源占用过大,网站卡死 //所以,我们可以 $sql = "INSERT INTO order (`goods_id`,`num`,`price`) VALUES "; for ($i=0;$i<1000;$i++){ if($i==0){ $sql.="($goods_id,$num,$price)"; }else{ $sql.=",($goods_id,$num,$price)"; } } $db->query($sql);
大概意思就是这样了,批量更新实现比较麻烦一点,就不发了,以下是批量更新的sql执行语句
UPDATE tiyan.dm_user_cupboard SET `res_id` = CASE `id` WHEN 1041 THEN '1' WHEN 1058 THEN '1' WHEN 1055 THEN '1' END,`food_code` = CASE `id` WHEN 1041 THEN '68' WHEN 1058 THEN '47' WHEN 1055 THEN '49' END,`food_name` = CASE `id` WHEN 1041 THEN '红枣' WHEN 1058 THEN '莲藕' WHEN 1055 THEN '洋葱' END,`num` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '3' WHEN 1055 THEN '2' END,`level` = CASE `id` WHEN 1041 THEN '2' WHEN 1058 THEN '2' WHEN 1055 THEN '2' END,`update_time` = CASE `id` WHEN 1041 THEN '2017-12-09 21:40:06' WHEN 1058 THEN '2017-12-09 21:40:06' WHEN 1055 THEN '2017-12-09 21:40:06' END WHERE id IN ( 1041,1058,1055 )
以上就是php大量数据入库怎么处理的详细内容,更多请关注其它相关文章!
上一篇: 详细解读JavaScript中的几种借用方法(图文教程)
下一篇: Java之代理模式学习
推荐阅读
-
Oracle 管道 解决Exp/Imp大量数据处理问题
-
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
-
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
-
解决PHP里大量数据循环时内存耗尽的方法
-
nginx比apache处理静态文件速度快,但是nginx处理大量并发的php请求时,容易出现502错误,频率大概是多少
-
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
-
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
-
Oracle 管道 解决Exp/Imp大量数据处理问题
-
php post大量数据时发现数据丢失问题解决方法
-
php+ajax导入大数据时产生的问题处理