中年|因用了Insert into select语句,美女同事被开除了!( 二 )
INSERT INTO order_record SELECT*FROMorder_todayWHEREpay_success_time < "2020-03-08 00:00:00"
在navicat中运行迁移的sql,同时开另个一个窗口插入数据 , 模拟下单 。
本文插图
本文插图
本文插图
从上面可以发现一开始能正常插入 , 但是后面突然就卡住了 , 并且耗费了23s才成功 , 然后才能继续插入 。 这个时候已经迁移成功了 , 所以能正常插入了 。
# 出现的原因
在默认的事务隔离级别下:insert into order_record select * from order_today 加锁规则是:order_record表锁 , order_today逐步锁(扫描一个锁一个) 。
分析执行过程 。
通过观察迁移sql的执行情况你会发现order_today是全表扫描 , 也就意味着在执行insert into select from 语句时 , mysql会从上到下扫描order_today内的记录并且加锁 , 这样一来不就和直接锁表是一样了 。
这也就可以解释 , 为什么一开始只有少量用户出现支付失败 , 后续大量用户出现支付失败 , 初始化订单失败等情况 , 因为一开始只锁定了少部分数据 , 没有被锁定的数据还是可以正常被修改为正常状态 。 由于锁定的数据越来越多 , 就导致出现了大量支付失败 。 最后全部锁住 , 导致无法插入订单 , 而出现初始化订单失败 。
# 解决方案
最终的sqlINSERT INTO order_record SELECT*FROMorder_today FORCE INDEX (idx_pay_suc_time)WHEREpay_success_time <= "2020-03-08 00:00:00"
执行过程
# 总结
# 参考
https://blog.csdn.net/asdfsadfasdfsa/article/details/83030011
作者:不一样的科技宅 来源:juejin.im/post/5e670f0151882549274a65ef之前 , 给大家发过三份Java面试宝典 , 这次新增了一份 , 目前总共是四份面试宝典 , 相信在跳槽前一个月按照面试宝典准备准备 , 基本没大问题 。
《java面试宝典5.0》(初中级)
《350道Java面试题:整理自100+公司》(中高级)
《资深java面试宝典-视频版》(资深)
《Java[BAT]面试必备》(资深)
分别适用于初中级 , 中高级 , 资深级工程师的面试复习 。
内容包含java基础、javaweb、mysql性能优化、JVM、锁、百万并发、消息队列 , 高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级等等 。
获取方式:点“在看” , V信关注上述Java最全面试题库号并回复【面试】即可领取 , 更多精彩陆续奉上 。
看到这里 , 证明有所收获
必须点个在看支持呀 , 喵
java sql mysql insert select【来源:java进阶架构师】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。邮箱地址:newmedia@xxcb.cn
推荐阅读
- 中年|北斗“一张网”可实现全天候、高精度、自主可控服务
- 中年|Python编程语言有什么独特的优势呢?
- 中年|谈一谈我的十年机械工作经历
- 中年|弹无虚发的背后,国产弹药质量把关人,精密机床都要自叹不如
- 中年|宿迁深圳招商再结硕果,签约项目19个,协议总投资158亿元
- 中年|苹果:已终止Epic Games开发者账号
- 中年|圆满的结局!苹果微信之间不用再二选一,美国政府还是做出让步
- 中年|国家能源集团成功研发矿用卡车能耗制动开关预警装置
- 中年|什么是余压监控系统?余压监控系统如何接线和安装?一篇文章搞懂
- 中年|上线供应链金融、搭建标准质量体系,三全产业伙伴卓越质量联盟正式启动
