1、臟讀
- 「事務B」將 id 為 1 的用戶 name 修改為“小卡”,事務未提交。
- 「事務A」查詢 id 為 1 的用戶數據,此時 name 已為“小卡”。
2、不可重復度
- 「事務A」第一次讀取 id 為 1 的用戶,name 是 “卡卡”。
- 「事務B」將 id 為 1 的用戶 name 改為了 “小卡”,并提交了事務。
- 「事務A」第二次讀取 id 為 1 的用戶,此時 name 就變成 “小卡” 了。
3、幻讀
這里「幻讀」我分成 2 個場景來總結,一個是INSERT、一個是DELETE,如下:
3.1、INSERT
- 「事務A」第一次讀取 age 為 21 的用戶,返回結果是 1 條數據。
- 「事務B」插入一條age為21的新用戶,提交了事務。
- 「事務A」第二次讀取 age 為 21 的用戶,返回結果是 2 條數據(將「事務B」插入的新數據也讀出來了)。
3.2、DELETE
- 「事務A」第一次讀取 age 為 21 的用戶,返回結果是 2 條數據。
- 「事務B」刪除 id 為 2 的用戶,提交了事務。
- 「事務A」第二次讀取 age 為 21 的用戶,返回結果是 1 條數據。
4、不可重復度 和 幻讀 的區別
不知道大家對「不可重復度」和「幻讀」的理解是不是和我一樣,感覺非常相近,都是在一個事務中多次讀(相同條件),每次結果都不同。對于這 2 個概念有什么區別,我的理解如下:
- 「不可重復度」的重點在于 “修改” 操作。
- 「幻讀」的重點在于 “新增”、“刪除” 操作。