首先仅仅加上selelct for update是不足够的,还必须利用事务保证操作的原子性。
image.png
保证不会出现多线程并发问题:
- 原子性(开启事务,只有在执行完所有操作之后才释放掉锁)
- 行锁 (确保只有一个线程能够回去到对应记录,其他线程阻塞,直到占用线程释放)
仅仅使用事务保证原子性:
其他线程还是可以获取记录进行覆盖。
仅仅使用了行锁:
MySQL的每一个操作都是开启事务的,并且会自动提交,仅仅加入行锁,第一步操作后就事务提交释放,依旧会被覆盖记录。
首先仅仅加上selelct for update是不足够的,还必须利用事务保证操作的原子性。
保证不会出现多线程并发问题:
仅仅使用事务保证原子性:
其他线程还是可以获取记录进行覆盖。
仅仅使用了行锁:
MySQL的每一个操作都是开启事务的,并且会自动提交,仅仅加入行锁,第一步操作后就事务提交释放,依旧会被覆盖记录。
本文标题:如何基于MySQL的行锁来实现悲观锁?
本文链接:https://www.haomeiwen.com/subject/yxdvoktx.html
网友评论