MySQL数据库四种隔离级别以及应用场景的记录

1,658 阅读1分钟
  • 已经被问烂的面试问题。

1、四种隔离级别

READ UNCOMMITTED

读未提交。当前事务可以看到未提交事务的内容。产生脏读。一般都不会应用

READ COMMITTED

读已提交。当前事务可以看到已经提交事务的内容。
也就是多次select的结果可能会不一样。但是正常来讲是正常的。
这个也是一般公司中默认的数据库事务级别。

REPEATABLE READ

可重复读。
也就是多次select的结果是一样的。
但是会产生幻读的情况。幻读的情况就是多次select的结果出现不同的情况。
MySQL默认是RR。

SERIALIZABLE

串行化。
读读操作不会阻塞。写操作会堵塞。不会出现脏读、幻读。

2、为什么默认的事务隔离级别是RC而不是RR?

1、首先在MySQL5.0之前的版本主从复制在RC级别下会有问题。
   具体这个问题没有详细的去了解。所以MySQL的默认的数据库的事务隔离级别是RR
2、RR会产生间隙锁,这样在频繁的插入、更新过程中更容易产生锁等待。甚至是死锁。
   而RC在更新和修改的时候仅锁住对应的记录(行锁)。
3、RR在有索引的时候是间隙锁,没有索引的时候是锁全表。

3、在RR级别解决幻读。

1、MVCC仅在RR和RC级别使用。
2、MySQL在RR级别使用MVCC(多版本并发控制) + 间隙锁来解决幻读的情况。

4、 后面继续记录间隙锁和MVCC的原理。