mysql建临时表批量更新

2019-12-13  本文已影响0人  Longer_JzL

业务场景描述

老板:把现在生产上的用户的实名信息,改成跟这份excel表里面的实名信息一样。


image.png

小龙(程序猿)一看,这个简单,excel表里就8条数据,也就是说需要更新的用户只有8个,立马写了8条update语句。
sql如下:

update tbl_realname_info set realname='张三',idcard='74384371327383843122',bankcard='13243223534544623',mobile='13488728893'
 where customer_no='200104986122';

..........省略其他的7条update语句。

第二天,老板提出了同样的需求,但是,这次给过来的excel表里的数据量却比上次大太多,有几千个用户的实名信息需要进行修改。小龙陷入了沉思,心想:几千条update语句,要写到几时才能写完呀!!

解决办法

步骤1:创建临时表(temp_realname)
CREATE TABLE `temp_realname` (
  `customer_no` varchar(50) DEFAULT NULL COMMENT '用户编码',
  `realname` varchar(50) DEFAULT NULL COMMENT '真实名字',
  `idcard` varchar(100) DEFAULT NULL COMMENT '身份证号',
  `bankcard` varchar(100) DEFAULT NULL COMMENT '银行卡号',
  `mobile` varchar(50) DEFAULT NULL COMMENT '手机号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='更改实名信息临时表';
表结构示意图.png
步骤2:修改excel列明,与临时表字段保持一致。
image.png
步骤3:将修改后的excel表数据导入到临时表里面(辅助工具:Navicat)
导入操作示意图.png 导入数据后临时表数据示意图.png
步骤4:写update与select结合使用的sql
UPDATE tbl_realname_info a
INNER JOIN (
    SELECT
        t.customer_no,
        t.realname,
        t.idcard,
        t.bankcard,
        t.mobile
    FROM
        temp_realname t
) b ON a.customer_no = b.customer_no
SET a.realname = b.realname,
 a.idcard = b.idcard,
 a.bankcard = b.bankcard,
 a.mobile = b.mobile;
步骤5:执行上面的sql

总结:这里的关键点在于
1.创建临时表
2.update和select结合使用
update结合select还有很多灵活运用,可以自行上网搜索学习。这里只是举了一个小小的案例,这个案例也是程序员们经常会遇到的,希望对您有所帮助

上一篇下一篇

猜你喜欢

热点阅读