并发更新引发的死锁问题

问题1:

最近看到一条面试题:并发更新同一条记录如何解决事务死锁?

参考:并发更新引发的死锁问题排查

解决方法:高并发程序,都不应该存在仅根据非主键的几个字段一查就要update/delete的场景。即使有,也应该改为先把要更新的记录查出来然后逐条按主键id更新。

 

问题2:

参考:并行事务同时更新同一条记录

最后,总结并行事务第一个事务会锁住更新的记录,下一个事务操作(更新或删除)该记录时排队等待上一个事务释放锁,如果等待过长会取消操作,并且抛出异常,捕获异常进行相应的操作回滚事务或关闭连接释放锁,不然会导致死锁。并且上一个事务提交之后,下一个事务的回滚不会影响到上一个事务的操作。

 

 

测试问题1

测试事务死锁

 

 

每次插入数据插入200条数据 username=test

 

 

都是for循环修改那200条数据

 

异常信息:

 

 

posted @ 2020-10-15 14:34  _Phoenix  阅读(1279)  评论(0编辑  收藏  举报