select 加锁分析 https://www.cnblogs.com/rjzheng/p/9950951.html
关于幻读 https://www.cnblogs.com/rjzheng/archive/2004/01/13/9955395.html
参考文章:https://www.jianshu.com/p/ed896335b3b4

一、锁的用法
1、乐观锁
版本号、时间戳
或者 update table set 库存
= 库存
- 1 where id = 1 and 库存
- 1 >= 0
2、悲观锁
显示的加锁,比如for update
高并发场景并不适用
二、锁的类型
1、共享锁 S Lock
2、排它锁 X Lock

延展 意向锁 ...
三、一致性非锁定读
MVVC (多版本并非控制)
在默认配置下, 即事务的隔离级别为REPEATABLE READ模式下,InnoDB存储引擎的Select(快照读)操作使用的是一致性非锁定读。
四、 一致性锁定读
当用户需要显示的对数据库读取操作进行加锁以保证数据的逻辑的一致性。而这就要求数据库支持加锁语句。即使是对Select的只读操作。InnoDB存储引擎对于Select语句支持两种一致性的锁定读操作。
1、select ... for update (意向共享锁)
2、select ... lock in share mode (意向排它锁)
关于 update 和 lock in share mode 区别
共同点:两者都必须在事务中使用
不同点:for update 对记录加写锁,此时记录不能被其他线程加读锁或者写锁。
lock in share mode对记录加读锁,此时记录能被其他线程加读锁,不能加写锁。但是可以在当前事务内,再加写锁。
网友评论