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的原理。