(1)简述
    业务系统是一个个的事务,每个事务里可能是一个或者多个增删改查的SQL语句,一个事务里的SQL要不然一起成功提交,要不然有一个SQL失败,事务就进行回滚,所有SQL做的修改都撤销了。业务系统不是一个单线程系统,是有很多线程的,面向的终端用户是有很多人的,可能同时发起请求,所以需要多个线程并发处理多个请求,于是业务系统很可能基于多线程并发的对MySQL数据库去执行多个事务的。

    (2)多个事务
    每个事务提交,提交后redo log刷入磁盘,结果MySQL宕机,是可以根据redo log恢复事务修改过的缓存数据。
    如果要回滚事务,那么就基于undo log来回滚就可以了,把之前缓存页做的修改都回滚了就可以了。
    但是存在很多问题:
    (A) 多个事务并发执行的时候,可能会对缓存页里的一行数据进行更新,这个冲突怎么处理?是否要加锁?
    (B) 可能有的事务在对一行数据做更新,有的事务在查询这行数据,这里的冲突怎么处理?

    (3)后续
    所以需要解决上述问题,解决多个事务并发运行的时候,同时写和同时读写的一些并发冲突的处理机制,包括MySQL事务的隔离级别MVCC多版本隔离锁机制。
    39.jpg