【MySQL】事务隔离级别 和 MVCC

事务隔离级别和 MVCC


事务 trx
特性 AIDC
事务的目的是为了保证数据原子性,一致性,隔离性,持久性

MVCC 多版本控制

说起 MVCC 不得不提 undolog 日志和 roll_pointer 字段,每当执行,新增,更新,删除操作时候,都会用 undolog 日记记录老的版本,而连接起来这些版本的指针就是 roll_point 字段
从而保证了事务期间出现问题可以回滚,保证了原子性
如此便称之为多版本并发控制 MVCC

事务的隔离级别:

  • 未提交读
    • 事务A期间,二次读某条件数据,读到了事务B没提交事务前修改的数据
  • 已提交读
    • 事务A期间,二次读某条件数据,读到了事务B提交事务后修改的数据
  • 可重复读
    • 事务A期间,二次读某条件数据,数据还是一样的,但是可能出现幻读,就是符合条件的数量变了
  • 串行化
    • 事务A期间,这个数据不会被其他事务操作,读写都不行

为什么可重复读无法完全避免幻读

幻读是新增的数据,或者删除
可重复读隔离级别的实现是通过快照,在读之前 readview 一下
他锁定的是之前的数据,没法对新增的数据锁定
说简单点,咱们都知道无法完全解决,可以通过加锁解决
就是因为之前读的时候,没有对,比如id3-5的范围加锁
就这个原因(个人想的,有错请指出)(第一次想法,发现说的不完全对,少了很多)
那么这样就完全解决了麻?
不,没有,还有两种情况
小林coding的讲解

兄弟们,我是真的悟了
但是我清楚的知道,我讲的,写出来的还不好
但是我可以告诉你怎么去悟
先去看小孩子的《MySQL是怎么样运行的》第21章的事务隔离级别 和 MVCC
再看小林coding的事务篇,你会发现,你真的悟透透的

你可能感兴趣的:(mysql,数据库)