MySQL默认的隔离界别有可重复读,除此之外,MySQL还支持读未提交,读提交,串行化三个隔离界别
我了解到的并发问题存在脏读,不可重复读,幻读这三种,不同的隔离界别,解决的问题也各不相同。
脏读,不可重复读,脏读的意思:
- 脏读是指一个事务读取了另一个事务还未移交的数据,如果另一个事务回滚,则读取的数据是无效的。脏读可能导致数据的不一致性
- 不可重复读是指一个事务多次读取同一条数据,但是在此期间另一个事务修改了该记录,导致前后读取的数据不一致,不可重复读可能导致数据的不一致性
- 幻读是指一个事务多次执行同一个查询,但是在此期间另一个事务插入了符合该查询条件的新数据,导致前后数据不一致,幻读可能导致数据的不完整性。
解决的问题:
- 读未提交一个问题也没有解决
- 读已提交避免了脏读的问题,但是还存在不可重复读和幻读两个问题
- 可重复读避免了脏读和不可重复读的问题,不过对于幻读问题是很大程度上避免了,没有完全避免
- 串行化是所有问题都可以避免,但是事务的并发性能是最差的。