关于mysql:mysql-系列3事务与MVCC

3次阅读

共计 490 个字符,预计需要花费 2 分钟才能阅读完成。

事务


下图依照工夫执行两个事务
create table T(c int) engine=InnoDB;
insert into T(c) values(1);

隔离级别

  1. 读未提交:V1=2,V2=2,V3=2
  2. 读提交:V1=1,V2=2,V3=2
  3. 可反复读:V1=1,V2=1,V3=2
  4. 串行化: V1=1,V2=1,V3=2
    串行化则在事务 B 执行“将 1 改成 2”的时候,会被锁住。直到事 务 A 提交后,事务 B 才能够继续执行

在实现上,数据库外面会创立一个视图,拜访的时候以视图的逻辑后果为准。
在“可反复 读”隔离级别下,这个视图是在事务启动时创立的,整个事务存在期间都用这个视图。
在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创立的。
在“读未提交”隔离级别下间接返回记录上的最新值,没有视图概念;
而“串行 化”隔离级别下间接用加锁的形式来防止并行拜访。

MVCC

  1. 暗藏字段:
    DB_TRX_ID 创立这条记录的事务 id 或者最初一次批改的事务 id
    DB_ROLL_PTR 回滚指针,指向这条记录的上一个版本
    DB_ROW_ID 暗藏主键,如果没有主键,会生成一个 6 字节的 row_id
  2. undo log
    快照读 读历史
  3. reaview

正文完
 0