锁
1.1
排他锁X
共享锁S
意向排他锁
意向共享锁
image.png
一致性非锁读操作
MVCC 会把访问的row读缓存起来。read commit和repeatable read
read commit:总是读取最新的版本。所以不可重复读。
repeatable read:读取事务开始的版本,所以值总是一样的,事务未提交不会读取到其他事务提交的修改。
这两个级别读取都不会对row加锁。
select for update 加X锁
select lock in share mode 加S锁
row加锁之后,一致性非锁读还是可以读取的
锁的算法
Record Lock:单个行记录上加锁
Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
Next-key Lock:Record Lock+Gap Lock 锁定 一个 范围, 并且 锁定 记录 本身。
如果 InnoDB 存储 引擎 表 建立 的 时候 没有 设置 任何 一个 索引, 这时 InnoDB 存储 引擎 会使 用 隐式 的 主 键 来 进行 锁定。
repeatable read模式下用的Next-key Lock
锁的问题
- 更新丢失
- 脏读
脏数据:缓存中修改的数据,还没有commit。
脏页:缓存池中修改的页,还没有刷新到磁盘。
读到脏数据:一个事务读取到另外一个事务未提交的修改,违反事务的隔离性。 - 不可重复读
一个事务内多次读同一数据会有不同的结果。违反了数据的一致性
隔离级别
read uncommit
read commit
repeatable read
可串行化
网友评论