RR - Repeatable Read
可重复读
MySQL数据库默认的隔离级别。通过MVCC(Multi-Version Concurrency Control 多版本并发控制)来实现,在事务中的读操作通过对当前的数据库中记录一个版本,读操作只会读取记录的版本,因此相当于对数据库的数据建立了一个快照数据,因此叫做快照读。该级别解决了READ COMMITTED隔离级别导致的问题。它保证同一事务的多个实例在并发读取事务时,会看到同样的数据行。不过,这会导致幻读(在可重复读隔离级别下,普通查询是快照读,不会看到别的事务插入的数据,幻读只在当前读下才会出现(select xxx for update)。会造成一个事务中先产生的锁,无法锁住后加入的满足条件的行,进而产生数据一致性问题,在一个事务中,先对符合条件的目标行做变更,而在事务提交前有新的符合目标条件的行加入,这样通过binlog同步的数据是会将所有符合条件的目标行都进行变更,即事务完成时,更新的行数大于原本事务开始时查询到的行数)。InnoDB和Falcon存储引擎通过多版本并发控制机制解决了幻读问题(间隙锁)。
RC - Read Committed
读取提交内容
大多数数据库系统的默认隔离级别(但是不是MySQL的默认隔离级别),满足了隔离的早先简单定义:一个事务开始时,只能“看见”已经提交事务所做的改变,一个事务从开始到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也支持所谓的“不可重复读”。这意味着用户运行同一个语句两次,看到的结果是不同的。
RU - Read UnCommitted
读取未提交内容
在这个隔离级别,所有事务都可以“看到”未提交事务的执行结果。在这种级别上,可能会产生很多问题,除非用户真的知道自己在做什么,并有很好的理由选择这样做。本隔离级别很少用于实际应用,因为它的性能也不比其他性能好多少,而别的级别还有其他更多的优点。读取未提交数据,也被称为“脏读”。
S - Serializable
可串行化
该级别是最高级别的隔离级。它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简而言之,SERIALIZABLE是在每个读的数据行上加锁。在这个级别,可能导致大量的超时Timeout
和锁竞争Lock Contention
现象,实际应用中很少使用到这个级别,但如果用户的应用为了数据的稳定性,需要强制减少并发的话,也可以选择这种隔离级。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。