InnoDB中锁的类型非常多,总体上可以如下分类:
这些锁都是做什么的?具体含义是什么?我们现在来一一学习。
1. 解决并发事务问题
我们已经知道事务并发执行时可能带来的各种问题。最大的一个难点是:一方面要最大程度地利用数据库的并发访问能力,另一方面又要确保每个用户能以一致的方式读取和修改数据,尤其是一个事务进行读取操作而另一个事务同时进行改动操作的情况下。
2. 并发事务问题
当一个事务进行读取操作,而另一个事务进行改动操作时,我们前面说过,这种情况下可能发生脏读、不可重复读、幻读的问题。
怎么解决脏读、不可重复读、幻读这些问题呢?其实有两种可选的解决方案:
2.1. 方案一:读操作使用MVCC,写操作进行加锁
事务利用MVCC进行的读取操作称之为一致性读,或者一致性无锁读,也称之为快照读,其读取的通常是记录的历史版本数据。所有普通的SELECT
语句(plain SELECT)在R