数据库中事务的四种隔离级别(从低到高):READ-UNCOMMITTED(读取未提交)、READ-COMMITTED(读取已提交)、REPEATABLE-READ(可重复读)、SERIALIZABLE(可串行化)。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
READ-UNCOMMITTED | √ | √ | √ |
READ-COMMITTED | × | √ | √ |
REPEATABLE-READ | × | × | √ |
SERIALIZABLE | × | × | × |
- READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。读取未提交级别只要在读操作时不加锁就行了。假设事务B首先对数据d进行修改为d1,A读取到了数据d=d1,接着事务B回退了,这样就导致了脏读,事务A读取了未提交的数据d1。只要数据库在读操作时不加读锁,就可能会出现这种情况。
- READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。读取已提交级别,要在写操作上加写锁,