逸帅 发表于 2021-5-6 16:15

ACID、事务隔离、脏读、可重复读、幻读

# ACID、事务隔离、脏读、可重复读、幻读

## ACID的概念:

- 原子性(atomicity):一个事务中的操作,要么全部完成,要么全部不完成,若过程中发生错误,则恢复到事务开始之前的那个状态。
- 一致性(consistency):事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。不一致的例子:事务执行了一半,只有一部分的数据写入了数据库,然后发生故障,导致数据不一致。
- 隔离性(isolation):允许多个事务同时操作,但防止事务交叉执行导致数据的不一致。包括未提交读、已提交读、可重复读、串行化。
- 持久性(durability):事务结束之后,数据的储存就是永久的,不会丢失。

## 事务的隔离级别:

|                            | 脏读 | 不可重复读 | 幻读 |
| -------------------------- | :--: | ---------- | ---- |
| read uncommitted(未提交读) |是| 是         | 是   |
| read committed(已提交读)   |否| 是         | 是   |
| repeatable read(可重复读)|否| 否         | 是   |
| serializable(串行化)       |否| 否         | 否   |

## 并发事务存在的问题:

- 更新丢失:多个事务选择同一行数据,最后提交的事务覆盖了前面提交的事务数据,造成更新丢失
- 脏读:事务A读取到了事务B已修改,但未提交的数据。事务B回滚则数据不一致(不满足事务的一致性)
- 不可重复读:事务A读取一次数据后,事务B修改了这些数据,事务A再次读取这些数据时,发现数据不一致(不满足事务的隔离性)
- 幻读:事务A读取到了事务B提交后新增的数据(不满足事务的隔离性)



### 脏读、不可重复读、幻读的区别:

脏读:事务B还未提交的数据就被事务A读到了

不可重复读:事务B修改数据并提交,被事务A读到了

幻读:事务B新增、删除数据并提交,被事务A读到了

goodista 发表于 2021-5-6 16:23

谢谢分享 学习了

逸帅 发表于 2021-5-6 16:42

做笔记的同时分享...后面还有计算机网络的笔记和jvm、juc,然后差不多秋招了

fht000 发表于 2021-5-6 16:44

这个算啥呢,水帖子,还是做笔记啊

w92vv 发表于 2021-5-6 16:59

太专业了,我都不知道说的是啥{:301_1004:}

逸帅 发表于 2021-5-6 17:58

fht000 发表于 2021-5-6 16:44
这个算啥呢,水帖子,还是做笔记啊

很明显的笔记啊,内容和百度的都不一样的,用自己的理解精简出来了

lijiesuperwow 发表于 2021-5-26 15:00

考你一下 能说下mysql 的innodb引擎是怎样实现可重复读的?

逸帅 发表于 2021-5-26 16:56

lijiesuperwow 发表于 2021-5-26 15:00
考你一下 能说下mysql 的innodb引擎是怎样实现可重复读的?

大佬,这个还真不清楚,感觉MySQL这一块,就多理解了一下索引这些,更深入的没探究过...不做DBA的话,这一块需要深究一下不...感觉面试好像没问到这一块

lijiesuperwow 发表于 2021-5-27 08:29

逸帅 发表于 2021-5-26 16:56
大佬,这个还真不清楚,感觉MySQL这一块,就多理解了一下索引这些,更深入的没探究过...不做DBA的话,这 ...

说到Mysql事务必然要去了解下 mvcc原理,很有必要,知其然要知其所以然。

逸帅 发表于 2021-5-27 08:48

lijiesuperwow 发表于 2021-5-27 08:29
说到Mysql事务必然要去了解下 mvcc原理,很有必要,知其然要知其所以然。

好的好的,记下了,昨天面试也发现了这一块还是有短板的,我学完jvm和juc,针对这些我加强学习一下
页: [1]
查看完整版本: ACID、事务隔离、脏读、可重复读、幻读