【原创】简单聊聊丢失更新、脏读、不可重复读、幻读和事务隔离级别

丢失更新是两次事务过程中发生了修改更新:
两个事务中,前后时间顺序更新了同一条记录同一字段的内容所产生的覆盖错误。

脏读是两次事务过程中发生了修改更新:
同样的条件事务中, 其中一个事务读取到另外一个修改更新但最终并未提交的回滚了的事务操作内容。
update和(锁行即可解决),

不可重复读是两次事务过程中发生了修改更新:
同样的条件事务中, 前后两次读取的内容结果不一样
update和(锁行即可解决),

幻读是两次事务过程中发生了新增删除
同样的条件事务中, 前后两次读取的记录数不一样
insert和delete(需要锁表解决)。

事务的四大特性:⑴ 原子性(Atomicity)⑵ 一致性(Consistency)⑶ 隔离性(Isolation)⑷ 持久性(Durability)
mysql数据库隔离级别
mysql默认的隔离级别:可重复读(Repeatable Read)

MySQL之所以选择可重读事务隔离机制是因为早期binlog只支持statement格式,而此种格式在读提交隔离机制下回导致主从不一致。

MySQL的InnoDB存储引擎默认事务隔离级别是RR(可重复读),是通过 “行级锁+MVCC”一起实现的,事务ID和行版本ID保证了读取的一致性和隔离性。正常读的时候不加锁,写的时候加锁。而 MCVV 的实现依赖:隐藏字段、Read View、Undo log。

在MySQL中,通过多版本并发控制(MVCC)去避免幻读的问题,但是只是在select的时候可以避免幻读,update之后再select还是可能会出现幻读现象。

此条目发表在服务器分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论