mysql间隙锁
https://blog.csdn.net/suixinsuoyu12519/article/details/86505388
mysql RR 与RC mvcc
https://www.cnblogs.com/digdeep/archive/2015/11/16/4968453.html
Mysql数据库的原子性是通过undo log 回滚日志,持久性 通过redo log ,隔离性是通过MVCC技术(每个数据库事务都会有三个隐藏字段,隐藏id,事务开始id,事务结束id)快照原理(查询所有事务结束id,小于本事务开始id的全部已完成事务)
mysql 的事务机制是通过:隔离级别+锁+日志 来实现的。
RC隔离级别,和RR隔离级别下是利用的MVCC技术。
MVCC技术:利用每行记录加上事务起始id和删除id,来记录日志,利用日志回滚数据。
俩段式锁协议-类似ReenLock(悲观锁-独占锁) 在finally 释放锁,db在commit实现统一释放锁
行锁:对要更新的数据行记录加锁
间隙锁:对要更新的数据行与行之间的间隙加锁,加锁解决了当前读的幻读
当前读:数据库当前已提交的最新数据
快照读:事务开始时第一次读操作进行一次数据快照。快照读解决了普通读方面的幻读。
若一个事务中先快照读,然后有当前读 update delect insert select * from table forupdate /share in lock …,快照读会被刷新。
①读未提交:所有隔离级别下的事务都可以读取到读未提交隔离级别下事务更新的数据(会引起脏读)。
②读已提交RC(Read-Commit):MVCC技术(解决脏读–读取其他事务结束id<当前时间戳,已完成的事务数据,但是与本事务开始查询的数据不一致,不可重复都)
③可重复读RR():MVCC技术(解决不可重复读–读取其他事务结束id<本事务开始id,已完成的事务数据,但是在本事务开始时才开始的其他事务当前时间戳已完成的事务,在这段时间其他已完成的事务,开始查到可以操作,此时本事务却操作失败,幻读)间隙锁
④串行化:
RC隔离级别下的半一致性读
https://www.lagou.com/lgeduarticle/82189.html