1.3.1 隔离级别
每种存储引擎实现的隔离级别不尽相同,下面简单介绍四种隔离级别。
1. READ UNCOMMITTED
事务中的修改,即使没有提交,对其他事务也都是可见的。
2. READ COMMITTED
一个事务开始时,只能“看见”已经提交的事务所做的修改。也就是说,一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。
也叫作不可重读(nonrepeatable read),因为两次执行相同的查询,可能得到不一样的结果。
3. REPEATABLE READ
在同一个事务中多次读取同样记录的结果是一致的。
但是会有幻读(Phantom Read)和幻行(Phantom Row)的存在。
InnoDB和XtraDB通过多版本并发控制解决了幻读问题。
可重复读是MySQL的默认事务隔离级别。
4. SERIALIZABLE
强制事务串行执行,避免幻读问题。也就是说,SERIALIZABLE会在读取的每一数据上都加锁,可能会导致大量超时和锁争用的问题。
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
READ UNCOMMITTED | YES | Yes | Yes | No |
READ COMMITTED | No | Yes | Yes | No |
REPEATABLE READ | No | No | Yes | No |
SERIALIZABLE | No | No | No | Yes |