PHP中使用临时表批量更新数据

接手维护公司一个内部使用的旧项目时碰到的问题,需要导入文件批量更新同个字段不同值的数据。

三年前的一个旧项目,最开始时单次仅需要更新数十至上百条数据,直接就是循环update。
而最近同事反馈说导入之后报错,功能完全没法用。
找同事拿来导入数据,说好的几十上百条的呢?这几万条数据是什么鬼??
测试了下,没有意外,超时了。
没啥说的,上手优化吧。

需求很简单,根据导入数据的iccid更新cardnum字段值。
流程也很简单,创建一张临时表将数据批量insert into到临时表,然后根据临时表数据进行update操作。

伪代码

//创建一张临时表tmp
create temporary table tmp(iccid char(20) primary key,cardnum char(11));
//批量添加待更新的数据至tmp表,因为担心后续数量更大,实际项目里这里用循环分批添加的
insert into tmp values (iccid1,cardnum1),(iccid2,cardnum2),...(iccidx,cardnumx);
//更新数据,mytable为要更新的数据表
update mytable,tmp set mytable.cardnum=tmp.cardnum where mytable.iccid=tmp.iccid;

完成。
效果还算可以,单次数万条数据,没有压力。

网上搜了下,还有其他方法,不过感觉都不太对我的需求,最后就使用这种临时表的方式来做了。
需要注意的是,这种方式需要有对数据库create权限

已有 2 条评论
  1. 早上阿里云给老子发了一封主机攻击断网通知邮件,我才想起上博客看看,都他吗一年多没更新了。
    你这个模板可以的啊,够简洁,找个空我也更新下算了。
    还有你那关于模块的文字改换了。。。

    1. Sun Sun

      我也懒得更新...主要天天都是curd,没啥好写的...
      关于有啥好改的,不改,坚决不改,那才是重点。

添加新评论