mysql死锁的解决方案

Posted 写程序的日子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql死锁的解决方案相关的知识,希望对你有一定的参考价值。

从最开始的,python语法,到项目使用的框架,规范,到设计实现的方案,我也从一个萌新的位置,走到了新一个萌新的位置,mysql机制,mysql锁机制

问题描述

阐述这个问题之前,需要对mysql的事务,锁,有个了解,当执行selectupdate时会加上什么种类的锁
这是当时在知乎提问的记录
mysql死锁的问题

https://www.zhihu.com/question/268632336

解决方案

  • 按照用户的id大小排序,后依次执行更新

  • 当进行一个转账时,在redis中添加锁,重点关注互相转账的类型,限制互转的发生。因为select _for_update 语句在使用时,有数量限制,多个迸发加锁会提示错误。

  • 还可以适当使用django的F()函数,例如这篇介绍(https://stackoverflow.com/questions/49169179/could-anyone-tell-me-about-the-lazy-loading-and-transaction-of-django),讲到了这个用法,filterF结合,进行update操作,能够有效限制数据,因为mysql的可复读,当一个事务修改后,commit后,另一个事务中select读取到的数据,还是之前的,但是在sql条件中判断时就会用新的值,例如mysql的四种隔离级别(https://www.cnblogs.com/huanongying/p/7021555.html)中讲到的例子。

以上是关于mysql死锁的解决方案的主要内容,如果未能解决你的问题,请参考以下文章

解决一次mysql死锁问题

MySQL - 死锁的产生及解决方案

mysql死锁

Java并发编程实战 04死锁了怎么办?

Java并发编程实战 04死锁了怎么办?

mysql 死锁排查