Mysql事务隔离级别

2017年02月14日

Mysql的事务隔离级别一共有4个.分别为 SERIALIZABLE(串行化) , REPEATABLE READ(可重复读) , READ COMMITTED(读已提交) , READ UNCOMMITTED(读未提交)

每种事务隔离级别对事务的影响:

  • SERIALIZABLE(串行化) : 所有事务串行化执行, 只有当前一个事务提交后,下一个事务才会开始执行.
  • REPEATABLE READ(可重复读) : 保证同一个事务多次读取同一数据行的数据是一致的,即 可重复读.但是它会有 幻读 的问题.
  • READ COMMITTED(读已提交) : 一个事务可以看到其他事务已提交的信息, 即它是不可重复读的.
  • READ UNCOMMITTED(读未提交) : 一个事务可以看到其他事务还未提交的内容, 可能出现脏读.

对幻读,不可重复读,脏读的说明

  • 幻读 : 事务1修改了表中所有行的数据,此时事务2对表新增了一行记录, 则事务1再读取表的所有数据时,会发现一行记录的数据没有被修改,就像出现了幻觉一样,这种现象称为幻读.

  • 不可重复读 : 事务1读取记录1后,事务2修改了记录1,则事务1再次读取时,和上一次的读取结果不一致, 即同一个事务中读取的同一行记录,可能会看到不同的数据.(可重复读,与之对应,即同一个事务中读取的同一行记录,一定会看到相同的数据)

  • 脏读 : 事务1修改了记录1,事务1还未提交时,事务2读了该行的数据,然后事务1回滚了,使事务2读取到的数据变成了脏数据, 这种现象称为脏读

每种事务隔离级别可能出现上面三种问题的对应关系

隔离级别 幻读 不可重复读 脏读
SERIALIZABLE(串行化) 不可能 不可能 不可能
REPEATABLE READ(可重复读) 可能 不可能 不可能
READ COMMITTED(读已提交) 可能 可能 不可能
READ UNCOMMITTED(读未提交) 可能 可能 可能