事务隔离级别的分类:
- 读未提交(read uncommitted)
- 最低的隔离级别,一个事务可以看到另一个未提交事务的数据修改,会导致脏读问题
- 读已提交(read committed)
- 一个事务只能看到已提交的事务所作的更改,可以避免脏读的问题,但是会引发不可重复读问题,即相同的查询会返回不同的值
- 可重复读(repeatable read)
- MySQL的默认级别
- 这个级别下一个事务多次查询的结果是一致的,可以避免不可重复读的问题,但是可能会引发幻读,即在同一个事务,多次查询可能会返回不同数量的行
- 串行化(serializable)
- 最高的隔离级别
- 事务间的操作按顺序执行,可以避免所有的并发问题,但是会大大降低并发性能
不同事务隔离级别产生问题的分类:
- 脏读
- 一个事务A可以看到另一个未提交事务B的数据修改,如果事务B数据未提交最终回滚,那么事务A读取的数据就不一致了
- 不可重复读(值不同)
- 在同一事务,读取同一数据两次,但是由于其他事务的修改并提交,导致读取的结果不同
- 幻读(行数不同)
- 在同一事务,执行相同的查询,但是由于其他事务的插入并提交,导致查询的结果不一样
