MySQL中的脏读、不可重复读和幻读是什么?

脏读

指的是一个事务读取到另一个事务未提交的数据,当后者事务发生回滚时,前者事务读到的数据就是和数据库数据不一致的(脏的)。

不可重复读

指的是一个事务中有两次读取操作 (查询),两次读取操作间隔中,由于另一事务修改了数据,导致前者事务两次读取到的数据不一致。

幻读

指的是一个事务中有两次范围读取操作(范围查询),两次读取操作的间隔中,由于另一事务修改了数据(插入和删除操作),导致前者事务两次读取到的结果集不一致。

不可重复读和幻读的区别

不可重复读倾向于单一数据行的字段值被修改,幻读更倾向于插入操作带来的数据量上的变化。

事务隔离级别对应解决的并行事务问题,及其在MySQL中的实现方式?

事务隔离级别

  1. 读未提交 (READ UNCOMMITTED):几乎没有锁,读取时允许其他事务修改数据,可能出现脏读问题
  2. 读已提交 (READ COMMITTED):只能读取已经提交的数据,防止脏读问题,但可能出现不可重复读问题
  3. 可重复读 (REPEATEABLE READ):MySQL默认的事务隔离级别,确保在同一事务中多次读取统一数据时,结果一致(即使其他事务修改了数据)。防止脏读和不可重复读问题,但仍可能出现幻读问题
  4. 串行化 (SERIALIZABLE):最高的隔离级别,通过强制事务串行执行避免所有并发问题