前言
我们开发人员在进行并发编程时,总是会面临并发带来的安全性和一致性的挑战,为了解决这一问题,我们通常会采用同步机制和锁机制,例如Java中的synchronized关键字和Lock接口。
MySQL同样需要解决并发事务带来的复杂问题,上文简单介绍了MySQL通过事务隔离机制可以解决并发问题,本文将结合案例进行深入剖析,以便掌握其原理并学习其思想。
并发事务情况分析
如果读过之前的文章就会知道,每行数据的读写都是基于数据页操作的。那么在此基础上,并发事务可能存在以下几种情况:
- 并发事务读/读数据页中的某行数据。
- 并发事务读/写数据页中的某行数据。
- 并发事务写/写数据页中的某行数据。
如果没有并发控制的情况下,单纯的读操作是不会对数据造成什么影响。但是,一旦涉及到写操作,情况就会变得很复杂:如果此时有一个事务对某行数据进行写操作,其他事务能否对该行数据进行读取?
这个问题有以下几个情形:
- 如果可以,写事务进行回滚后,读事务的数据就不是最新状态了,一致性如何保证?
- 如果不可以,读事务是不是只能进行排队等待写事务的完成,性能如何保证?
- 如果不排队等待,又怎么保证读事务的数据是最新状态(一致性)?
各隔离级别如何处理并发事务?
到这里应该就看明白了。结合事务隔离级别: