脏读:读到了未提交的无效数据![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/137ee08a875ffea273b77c5fa7a63f34.png)
不可重复读:更新前后的读取不同
幻读:插入前后的读取不同
隔离级别和读现象
读现象
- 脏读:读到了未提交的无效数据
- 不可重复读:更新前后的读取不同
- 幻读:插入前后的读取不同
隔离级别
-
Read uncommitted (未提交读)
-
Read committed (已提交读)
-
Repeatable read (可重复读)
-
Serializable (可序列化)
-
0
这四种隔离级别采取不同的锁类型来实现,若读取的是同⼀个数据的话,就容易发⽣读现象。
例如:
脏读(Drity Read):某个事务已更新⼀份数据,另⼀个事务在此时读取了同⼀份数据,由于某些原 因,前⼀个RollBack了操作,则后⼀个事务所读取的数据就会是不正确的
。
不可重复读(Non-repeatable read):在⼀个事务的两次查询之中数据不⼀致,这可能是两次查询过 程中间插⼊了⼀个事务更新的原有的数据。
幻读(Phantom Read):在⼀个事务的两次查询中数据笔数不⼀致,
例如有⼀个事务查询了⼏列(Row) 数据,⽽另⼀个事务却在此时插⼊了新的⼏列数据,
先前的事务在接下来的查询中,就会发现有⼏ 列数据是它先前所没有的。
在 MySQL 中,实现了这四种隔离级别,分别有可能产⽣问题如下所示:
脏读:允许读取未提交的信息,原因:Read uncommitted,
解决⽅案: Read committed(表级读 锁)
不可重复读:读取过程中单个数据发⽣了变化,
解决⽅案: Repeatable read (⾏级写锁)
幻读:读取过程中数据条⽬发⽣了变化,
解决⽅案: Serializable(表级写锁)
事务四大特性:
-
原⼦性(atomicity,或称不可分割性) :事务不可分割
-
⼀致性(consistency):事务前后状态一致。保持约束一致性和业务逻辑一致性。
-
隔离性(isolation,⼜称独⽴性) :并发中各事务独立
-
持久性(durability):更改永久性
原子性是对单个事务的操作保障,一致性是多个事务对共享资源的竞争规范。