并发事务控制方式

并发事务控制方式,主要有两种:锁和MVCC(多版本并发控制)

锁:数据库通过加锁来控制并发访问,确保数据的一致性和完整性。MySQL中主要是通过读写锁来实现的。

  • 共享锁(S锁):又称读锁,事务在读取记录的时候获取共享锁,允许多个事务同时获取(锁兼容)。
  • 排他锁(X锁):又称写锁/独占锁,事务在修改记录的时候获取排他锁,不允许多个事务同时获取。如果一个记录已经被加了排他锁,那其他事务不能再对这条记录加任何类型的锁(锁不兼容)。

根据锁粒度不同,锁又可以分为:

  • 行级锁:锁定单行数据,适用于高并发场景,锁冲突较少,性能较好。InnoDB存储引擎支持行级锁。
  • 表级锁:锁定整张表,适用于低并发场景,锁冲突较多,性能较差。MyISAM存储引擎支持表级锁。

MVCC(多版本并发控制)

MVCC:多版本并发控制方法,即对一份数据会存储多个版本,通过事务的可见性来保证事务能看到自己应该看到的版本。通常会有一个全局的版本分配器来为每一行数据设置版本号,版本号是唯一的。

MVCC在MySQL中实现所依赖的手段主要是: 隐藏字段read viewundo log

  • undo log : undo log用于记录某行数据的多个版本的数据。
  • read view和隐藏字段 : 用来判断当前版本数据的可见性。