mysql事务隔离级别 脏读,不可重复读,幻象读

1.事务里一些有问题的读取:脏读,不可重复读,幻象读 数据库

脏读 (dirty read)事务T1更新了一行记录的内容,可是并无提交所作的修改。事务T2读取更新后的行,而后T1执行回滚操做,取消了刚才所作的修改。如今T2所读取的行就无效了。 事务

不可重复读取 (nonrepeatable read)事务T1读取一行记录,紧接着事务T2修改 了T1刚才读取的那一行记录。而后T1又再次读取这行记录,发现与刚才读取的结果不一样。这就称为“不可重复”读,由于T1原来读取的那行记录已经发生了变化。 table

幻像读取 (phantom read)事务T1读取一条指定的WHERE子句所返回的结果集。而后事务T2新插入 一行记录,这行记录刚好能够知足T1所使用的查询条件中的WHERE 子句的条件。而后T1又使用相同的查询再次对表进行检索,可是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,由于对T1来讲这一行就像突 然出现的同样。 数据

2.事务的隔离级别 查询

从级别低到高依次为: tab

READ UNCOMMITTED 幻像读、不可重复读和脏读都容许。 di

READ COMMITTED 容许幻像读、不可重复读,但不容许脏读。 ant

REPEATABLE READ 容许幻像读,但不容许不可重复读和脏读。InnoDB默认级别 ab

SERIALIZABLE 幻像读、不可重复读和脏读都不容许。

可是InnoDB的可重复读隔离级别和其余数据库的可重复读是有区别的,不会形成幻象读(phantom read)。

ORACLE数据库支持 READ COMMITTED 和 SERIALIZABLE ,不支持 READ UNCOMMITTED 和 REPEATABLE READ
相关文章
相关标签/搜索