mysql死锁的解决方案
Posted 写程序的日子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql死锁的解决方案相关的知识,希望对你有一定的参考价值。
从最开始的,python语法,到项目使用的框架,规范,到设计实现的方案,我也从一个萌新的位置,走到了新一个萌新的位置,mysql机制,mysql锁机制
问题描述
阐述这个问题之前,需要对mysql的事务,锁,有个了解,当执行select
和update
时会加上什么种类的锁
这是当时在知乎提问的记录
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),讲到了这个用法,filter
和F
结合,进行update
操作,能够有效限制数据,因为mysql的可复读,当一个事务修改后,commit
后,另一个事务中select
读取到的数据,还是之前的,但是在sql条件中判断时就会用新的值,例如mysql的四种隔离级别(https://www.cnblogs.com/huanongying/p/7021555.html)中讲到的例子。
以上是关于mysql死锁的解决方案的主要内容,如果未能解决你的问题,请参考以下文章