mysql事务隔离or不隔离问题

39 阅读1分钟

简单介绍下MVCC?

MVCC 就像是在多线程系统里给每个线程拍一张数据库快照,大家都能读自己那一版,不抢锁、不卡顿,读写互不干扰,是数据库高并发性能的关键机制。

事务版本的作用是什么?

每个事务更新数据的时候,都会生成一个新的数据版本transaction id,事务更新完数据,把transaction id赋值给row trx_id。

image.png

介绍下事务数组的作用?

每个事务都有一个事务数组,里面记录了上一个回滚数组的id,事务读取数据有三种变化

  • 版本未提交,不可见
  • 版本已提交,试图创建后提交,不可见
  • 版本已提交,视图创建前提交,可见

总结:

InnoDB的行数据有多个版本,每个数据版本有自己的row trx_id,每个事务或语句有自己的一致性视图。普通查询语句是一致性读,一致性读会根据row trx_id和一致性视图确定数据版本的可见性。