1 背景知识
1.1 快照读
select * from table where [case];
读取事物序列号对应的快照(readView) ,所以不会出现幻读,也不会触发锁;
关于 mysql...的log ,readView相关,可参读 : mysql事物(1) - 背景知识:log,readView
1.2 当前读
select * from table where [case] for update.../ in share mode;
insert , update ,delete
读取最新版本数据,会触发锁;
1.3 隔离级别
不同的隔离级别,对待锁的处理也是不一样的,这里我们以MYSQL 5.7...,保证下次查询结果一致;但是间隙锁的右边界有2个17,此时会按照主键索引排序,只锁到id=3 的这一行;
3.3 行级(单行)
举例1 - 辅助索引(聚簇索引) - 等值非空查询
select * from...t where id = 1 for update;
现象 : 出现行锁,无间隙锁;
原因 : 只需要锁住这一行,下次当前读的结果就是一致的;
4 半乐观锁 (共享锁 , 关键字 : IN SHARE