一、事务
[TOC]
1.1 事务四大特性 ACID:原子性 一致性 隔离性 持久性
1.1.1 原子性 Atomicity
保证事务内所有操作要都成功,要么都失败。
1.1.2 一致性 Consistency
事务开始和结束之间的中间状态不会被其他事务看到
1.1.3 隔离性 Isolation
适当的破坏一致性来提升性能与并行度 例如:最终一致~=读未提交。
1.1.4 持久性 Durability
每一次的事务提交后就会保证不会丢失
1.2 数据隔离级别:未提交读 提交读 可重复读 可串行化
级别越高,问题越少,但是性能越差。
- 脏读 读到未提交的事务。在事务回滚的时候产生脏读
- 不可重复读 执行过程比较长,先读到事务未修改的数据,后读到事务修改后的数据。
- 幻读 执行过程较长, 两种情况:先读有,后去读没有;先读没有,后读有。(事务插入或者删除了数据)
- InnoDB的MVCC多版本并发控制 通过对每条数据加上版本号 配合间隙锁部分解决了幻读问题。
- 当事务A去修改事务B已经提交的数据的时候还是会产生幻读。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read Uncommitted | 有 | 有 | 有 |
Read committed | - | 有 | 有 |
Repeatable read | - | - | 有 |
Serializable | - | - | - |
1.2.1 Read Uncommitted 读到未提交的内容
会产生脏读,不可重复读,幻读
1.2.2 Read Committed 读到提交的内容
产生不可重复度和幻读
1.2.2 Repeatable read 可重复读
默认级别,innodb的MVCC配合间隙锁部分解决幻读。不能解决的部分幻读是当事务A去修改事务B已经提交的数据的时候还是会产生幻读。
1.2.2 Serializable 可串行化
完全解决幻读只能串行化。
网友评论