MySQL事务隔离级别和MVCC

标准的4中隔离级别

  • READ UNCOMMITED:未提交读
    最低的隔离级别,事务可以看到其他事务未提交的修改。这个级别下,存在脏读(Dirty Read)的问题,即一个事务读取到了另一个未提交事务的数据修改。
  • READ COMMITED:已提交度
    事务只能看到已经提交的数据修改。这个级别避免了脏读,但可能出现不可重复读(Non-repeatable Read)的问题,即在同一个事务中,多次读取同一行数据时,可能得到不同的结果。
  • REPEATABLE READ:可重复读
    事务执行期间保证多次读取同一行数据的结果是一致的。在这个级别下,MySQL使用多版本并发控制(MVCC)机制来实现,确保读取的数据是在事务开始时的一个一致视图,解决幻读(Phantom)。
  • SERIALIZABLE:可串行化
    最高的隔离级别,事务之间完全串行化执行,确保不会出现任何并发问题。在这个级别下,MySQL会对事务进行加锁,以保证事务之间的互斥性。

MVCC(多版本并发控制)

MVCC是MySQL中用于实现可重复读隔离级别的并发控制机制。它通过在数据行中维护多个版本来实现并发读取和写入的一致性。下面是MVCC的核心原理:

版本链

根据聚簇索引记录中的两个必要列(row_id,主键或者是非NULL的唯一索引)

  • trx_id:一个事物每次对某条聚簇索引记录进行改动,都会把该事物的事物id赋值给trx_id影藏列。
  • roll_pointer:每次对某条聚簇索引记录进行改动,都会把旧版写入到undo日志中。

ReadView

Read View(读视图)是用于实现多版本并发控制(MVCC)机制的重要概念之一。Read View是事务在特定时间点看到的数据库的一致性视图。

READ COMMITED和REPEATABLE READ 区别:

  • READ COMMITED 每次读取数据钱都生成一个ReadView
  • REPEATABLE READ 在第一读取数据室生成一个ReadView

purge

在合适的时候把update undo日志以及仅仅被标记删除的记录彻底删除。

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