前文
首先理解事务的ACID的隔离性 并发带来的问题,脏读
、不可重复读
、幻读
的问题。
脏读: 一个事务读取了另一个事务未提交的数据,导致数据不一致。【事务2未提交】
不可重复读: 一个事务前后两次读取的同一数据不一致 【事务2已提交】
幻读: 一个事务两次查询的结果集记录数不一致,返回的记录行数有差异
不可重复读跟脏读的区别
不可重读就是第二个事务提交了对数据的修改,脏读是在第二个事务未提交回滚了对数据的修改。
虽然在不可重复读
前后数据不一样,由于事务2最终提交了修改,在事务1第二次读到数据,实际上是有效的。
而不像脏读
事务2最终是回滚对数据修改,导致事务1第二次读取数据是无效的数据。
所以说不可重复读是还可以接受的。
InnoDB的几种事务隔离级别
支持4中隔离级别,一个事务对另一个事务并发进行修改时,可以相互影响的程度。
隔离级别 | 脏读 | 不可重复读 | 幻读 | 隔离性 | 并发性 |
---|---|---|---|---|---|
串行化(SERIALIZABLE) |