乐观锁并发问题
乐观锁
乐观锁, 就是在每个表后面加一个version的字段, 由你自己去维护,修改一次+1,如果发现取出来的和version不相等 就说明过期
那么说明是脏数据,但是这样耗费一定的查询性能,因为必须要在update的时候 去检查version
问题
比如线程1给id=3
这行数据进行操作,使用的是乐观锁,那么mysql内部会有个version
如果在线程1操作的同时,线程2也来了,也对id=3
进行操作
如果线程2的sql先操作完了,会发生什么问题?
个人推测
线程1是不是对线程2的操作进行写覆盖了?但是不对啊,有乐观锁,乐观锁要比对version的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
虽然没有太看明白你具体想问啥 ...
不过觉得还是可以先看看这个。
(可以)保证操作的原子性是数据库设计的基本原则之一,只要适当的利用 transaction 跟其他一些用于同步的机制,就不会出现一些操作插入另一些操作中间引起错误结果的情况。
这里并不需要在两个线程里加 mutex 互斥,而是由 mysql 来完成。