# 幻讀(Phantom read)

#### 同一個事務使用相同的條件搜尋第一次與第二次找出的筆數不相同，就叫做 Phantom read。

## 流程圖

![](https://2613845020-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7txW7ptJpxdaeDECi1%2F-M8LpEuZeLU85pJb2Fq9%2F-M8QT9gh5F2RSTBHpJaI%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202020-05-28%20%E4%B8%8B%E5%8D%889.28.32.png?alt=media\&token=6c3faea5-8483-4281-b5d8-5a058a1d487d)

原資料總筆數共 5 筆。

使用者\_1 開始交易，並下條件搜尋取得了總筆數 5 筆的資料。

使用者\_2 開始交易，並新增了 1 筆資料到資料庫，並結束了交易。

使用者\_1 再次下相同條件搜尋，取得了總筆數 6 筆的資料。

## 解決

:exclamation: 核心問題， **A 事務在同一次事務未完成前，同樣的搜尋得到不同的結果。**

若要避免此行為，**必須確保交易在確認前不阻止其他讀取交易，但會阻止更新交易**。

{% hint style="warning" %}
與 Unrepeatable Read 情境類似，**一個是更新**，**一個是建立**。
{% endhint %}

透過 **隔離模式 Serializable** 解決。
