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还有很多灵活运用,可以自行上网搜索学习。这里只是举了一个小小的案例,这个案例也是程序员们经常会遇到的,希望对您有所帮助