并发的事务可能存在的问题:
- 读脏:事务A读到了事务B未提交的数据。
- 不可重复读:事务A在事务B执行期间修改了数据,导致事务B同一个查询两次结果不一致。
- 幻读:事务A在事务B执行期间插入了数据,导致事务B先查后插被报重复。
InnoDB的事务隔离级别
- 读未提交(Read Uncommitted):select 不加锁,可出现读脏,并发性最高,一致性最差;(高并发场景不会用)
- 串行化(Serializable):所有select 被隐式转化为 select……in share mode,被如果结果集中有update、insert事务,则select被阻塞。(高并发场景不会用)
- 可重复读(Repeated Read)(InnoDB默认的隔离级别):
- 普通select 使用快照读
- 锁select /update /delete 根据查询条件选择记录锁、间隙锁/临键锁,防止读到幻影记录。
- 读提交(Read Committed)(互联网最常用)
- 普通select 使用快照读
- 锁select /update /delete 使用记录锁,可能会出现幻读。
以上总结参考:https://mp.weixin.qq.com/s/x_7E2R2i27Ci5O7kLQF0UA
数据库事务的4种隔离级别
原文:https://www.cnblogs.com/smallzhen/p/14477885.html