mysql事务隔离级别
概念
隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用。
脏读:读取未提交的数据;
不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间另外的事务修改了符合条件的数据;
幻读(Phantom Read):在一个事务的两次查询中数据行数不一致,这可能是两次查询过程中另外的事务对表做了insert或者delete操作;
注意:不可重复读和幻读的区别。两者都是数据不一致,前者是同一事务中两次查询,结果的数据行数一样,具体某些行的某些列数据不一样;后者指的是同一事务中,前后两次查询结果的行数不一样(两次查询期间另外的事务执行了insert或者update)。
为什么要分成两种形式呢,控制机制不一样。对于前者, 只需要锁住满足条件的记录即可。对于后者,要锁住满足条件及其相近的记录甚至整个表。
Read Uncommitted(未提交读):在该隔离级别,所有事务都可以看到其他未提交事务的执行结果,即允许读取脏数据;
Read Committed(已提交读):这是大多数数据库系统的默认隔离级别(SQL SERVER的默认隔离级别,但不是MySQL默认的),定义:一个事务只能看见已经提交事务所做的改变;
Repeatable Read(可重复读):这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行;
Serializable(可串行化):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。