一:报错信息
MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
具体报错信息如下图:
二:伪代码
三:报错原因
通过错误日志可以看出,错误原因跟 锁、事务有关,字面意思是:锁等待超时,请尝试新的事务
其实在开发过程中并未报错,后来到了仿真环境,因为是员工端的原因,并发量略高,执行上面逻辑的第4步时,比较耗时,导致新的请求过来的时候,锁还未释放(因为无论删除、插入、还是更新、mysql都会默认加锁的),新的请求想要获取锁,等了很久也拿不到锁,就导致了锁等到超时,请尝试新的事务
四:解决方案
对于事务
来说,应该都是耗时特别短
的,对于频繁的长事务
来说,就可能会出问题
所以这个可以控制事务的颗粒度
,123步放在一个事务里
,把步骤4单独处理
,或者异步处理