Skip to content

Commit b2e97b2

Browse files
committed
📝 update content
1 parent c1d7b5d commit b2e97b2

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

source/_posts/ACID.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ ACID 是指数据库管理系统(DBMS)在写入或者更新数据的过程
4444
| T6 | 查询余额为 900 元(与第一次读不一致)| |
4545

4646
### 幻读
47-
幻读可能发生在并发的读和写事务中,多次执行相同的查询却得到了不同的结果,这个不同并不是列值不同,而是记录数不同。原因是在某次查询前后,事务 B **添加(删除不算)**了符合事务 A 查询条件的记录。这里主要参考 [ANSI SQL-92 规范中的定义](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)
47+
幻读可能发生在并发的读和写事务中,多次执行相同的查询却得到了不同的结果,这个不同并不是列值不同,而是记录数不同。原因是在某次查询前后,事务 B 添加(删除不算)了符合事务 A 查询条件的记录。这里主要参考 [ANSI SQL-92 规范中的定义](http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)
4848

4949
| 时间点 | 事务 A | 事务 B |
5050
| ------------ | ------------ | ------------ |
@@ -56,7 +56,7 @@ ACID 是指数据库管理系统(DBMS)在写入或者更新数据的过程
5656
| T6 | 再次统计所有存款超过 10000 元的用户,发现多了(幻读) | |
5757

5858
### 脏写
59-
脏写可能发生在并发的写写事务中,一个事务修改了另一个未提交事务修改过的数据
59+
脏写可能发生在并发的写写事务中,两个未提交的事务同时修改同一数据,其中一个事务回滚导致另一个事务的修改被意外撤销
6060

6161
| 时间点 | 事务 A | 事务 B |
6262
| ------------ | ------------ | ------------ |
@@ -79,8 +79,8 @@ ACID 是指数据库管理系统(DBMS)在写入或者更新数据的过程
7979
| T5 | 提交事务 | |
8080
| T6 | | 提交事务 |
8181

82-
### 我的理解
83-
关于脏写和丢失更新,我个人的理解是:它们都是在一个事务中修改了另一个未提交事务修改过的数据。在任何隔离级别中,都不会允许出现一个事务修改别人还未提交的数据的情况,因为在写数据的时候会加排他锁,这样该事务的修改操作会等待另一个事务提交之后才能继续进行,此时再修改数据就不叫丢失更新了,这就是正常的更新操作。但是在应用层面还是可能会出现丢失更新,这类情况一般是在更新之前先查询了数据,并且之后的更新需要依赖该查询结果。看下面的这个例子:
82+
### 关于脏写和丢失更新
83+
我个人的理解是:它们都是在一个事务中修改了另一个未提交事务修改过的数据。在任何隔离级别中,都不会允许出现一个事务修改别人还未提交的数据的情况,因为在写数据的时候会加排他锁,这样该事务的修改操作会等待另一个事务提交之后才能继续进行,此时再修改数据就不叫丢失更新了,这就是正常的更新操作,只不过这会导致咱们的业务层面产生数据不一致的问题。这类情况一般是在更新之前先查询了数据,并且之后的更新需要依赖该查询结果。看下面的这个例子:
8484

8585
时间点 | 事务 A | 事务 B
8686
---|---|---

0 commit comments

Comments
 (0)