当前读与快照读

335 阅读1分钟

当前读

  • select...lock in share mode (共享读锁)
  • select...for update
  • update , delete , insert

快照读

   通过undo和MVCC实现

在可重复读的情况下,快照读可以避免幻读,在当前读的情况下需要加上间隙锁。

MVCC 在读已提交(Read Committed)和可重复读(Repeatable Read)隔离级别下起作用

MVCC的实现是基于ReadView版本链以及Undo日志实现的

InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列

  • trx_id:每次一个事务对某条聚簇索引记录进行改动时,都会把该事务的事务id赋值给trx_id隐藏列。

  • roll_pointer:每次对某条聚簇索引记录进行改动时,都会把旧的版本写入到undo日志中,然后这个隐藏列就相当于一个指针,可以通过它来找到该记录修改前的信息

聚簇索引简单说就是表中记录的物理顺序与键值的索引顺序相同,一个表只能有一个聚集索引,这类索引是和数据存在一起的