事务隔离级别 RR 可重复读
在RC 已提交读 级别下,同一事务中:
当我们使用读语句时:
- 确定扫描行
- 多次读取都是返回最新值,不锁行,值在期间可被其他事务提交修改,修改后,再读取就是修改后的值了
当我们使用写语句时:
- 确定扫描行
- 不锁行,值在期间可被其他事务提交修改
针对当前读,RC隔离级别保证对读取到的记录加锁 (记录锁),存在幻读现象
在RR 可重复读级别下,同一事务中:
当我们使用读语句时:
- 确定扫描行
- 有索引按索引确定
- 没有索引按全表确定
- 缓存扫描行
- 多次读取都是返回缓存
当我们使用写语句时:
- 确定扫描行
- 使用间隙锁锁定扫描行
- 写入时引用的值按最新值
快照读:简单的select操作,属于快照读,不加锁。(当然,也有例外)
select * from table where ?;
当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁
select * from table where ? lock in share mode;
select * from table where ? for update;
insert into table values (…);
update table set ? where ?;
delete from table where ?;