- Read Uncommitted(读未提交):
- 这是最低的事务隔离级别。
- 一个事务可以读取另一个尚未提交的事务的修改。
- 可能出现的问题包括脏读、不可重复读和幻读。
- 由于它允许读取未提交的数据,所以性能上可能稍好一些,但数据一致性风险也最高。
- Read Committed(读已提交):
- 大多数数据库系统的默认隔离级别(但不是MySQL的默认级别)。
- 一个事务只能读取已经提交的事务的修改。
- 避免了脏读,但可能出现不可重复读和幻读。
- 在这个级别下,一个事务内对同一数据的多次读取可能返回不同的结果,因为其他事务可能在此期间修改了数据并提交。
- Repeatable Read(可重复读):
- 这是MySQL,MongoDB的默认隔离级别。
- 在同一事务内的多次读取会看到相同的数据行,即使其他事务在此期间修改了这些行并提交。
- 避免了脏读和不可重复读,但可能出现幻读(即一个事务读取了几行数据,另一个并发事务插入新行,然后第一个事务再次读取同样的范围时,看到了这些新行)。
- 通常,这个级别通过多版本并发控制(MVCC)来实现。
- Serializable(串行化):
- 这是最高的隔离级别。
- 它通过强制事务串行执行,而不是并发执行,来避免脏读、不可重复读和幻读。
- 由于事务是串行执行的,因此性能通常最差。
- 在这个级别下,读操作会加共享锁,写操作会加排它锁,因此其他事务不能修改被读取的数据。