日期:2014-05-16  浏览次数:20710 次

MySQL中的事务隔离级别


?

SQL 标准用三个必须在并行的事务之间避免的现象定义了四个级别的事务隔离。 这些不希望发生的现象是:

  • 脏读(dirty reads)


一个事务读取了另一个未提交的并行事务写的数据。

  • 不可重复读(non-repeatable reads)


一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

  • 幻读(phantom read)


一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

SQL 事务隔离级别 ?

离级别 ?脏读(Dirty Read) ?? ? ? ? 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
读未提交(Read uncommitted) 可能 可能 可能
读已提交(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能
在MySQL中默认事务隔离级别是可重复读(Repeatable read).可通过SQL语句查询:
查看InnoDB系统级别的事务隔离级别:

?? ?mysql> SELECT @@global.tx_isolation;

结果:
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ? ?? ? |
+-----------------------+
1 row in set (0.00 sec)

查看InnoDB会话级别的事务隔离级别: