一级:当某一事务在修改数据时加独占锁( exclusive locks, write locks),直到事务结束(提交或者回滚)释放。由于不能同时对某一数据进行修改,因此一级封锁协议可防止丢失更新。可是读取数据时没有加任何锁,它仍是能够读取加了独占锁的数据,因此不能防止脏读不可重复读。
二级:在一级封锁基础上事务读数据时加共享锁( shared locks , read locks), 读取以后释放(共享锁范围是每次读取)。二级封锁协议可防止丢失更新,脏读。不能防止不可重复读。
三级:在一级封锁基础上事务读数据时加共享锁,直到事务结束释放(共享锁范围是整个事务)。三级封锁协议可防止丢失更新,脏读,不可重复读。 html
ANSI SQL isolation levels
Isolation level Dirty reads possible Nonrepeatablereads possible Phantom readspossible Lockingreadssql
READUNCOMMITTED Yes Yes Yes Nopost
READ COMMITTED(1) No Yes Yes Nospa
REPEATABLE READ(2) No No Yes Noorm
SERIALIZABLE(3) No No No Yes htm
REPEATABLE READ is MySQL’s default transaction isolation level. -摘自《High Performance MySQL Second Edition》
blog