はじめに
ある問題集の内容と、別で購入した書籍に記載の説明が異なっていたため、何が正しいのか自分なりに調べてたどり着いた個人の見解を記載します。合っているのかは正直わかりません。
説明の違いについて
記載内容は要約です。
| 書籍 | 問題集 | |
|---|---|---|
| ファジーリード(反復不能読み取り) | 別のトランザクションでコミットされた更新/削除結果が見える | 他トランザクションで対象データの変更がコミットされ取得されるデータ内容が変わってしまう |
| ファントムリード | 別のトランザクションのコミットされた挿入結果が見える | 他トランザクションでデータの挿入や削除がコミットされ、得られる結果が変わってしまう現象 |
「削除」の位置がそれぞれ違います。
調べてみてより迷子になった
いくつかのサイトを調べて回ってみましたが、「更新」がファジーリードで「削除と挿入」がファントムリードだ。というところもあれば、「更新と削除」がファジーリードで、「挿入」がファントムリードだ。はたまた、行数が変わらず内容だけが変わるの(更新)がファジーリードで、行数が変わるの(削除、挿入)がファントムリードだ、という説明の仕方もありました。
また、サイトによってはそもそも「更新、削除、挿入」について特に言及していない説明もありました。
個人の見解
結局わからなかったので、規格に沿った回答が欲しいことを伝えつつ、どういった理解が正しいのかGeminiくんに投げてみましたところ、以下の回答でした。(抜粋)
ファジーリード
- 一度読み込んだ特定の行の結果が、別のトランザクションのコミットにより変わってしまうこと(既存のデータに対する操作(中身の変更・消去))
ファントムリード
- 一度読み込んだ特定の範囲のデータが、別のトランザクションのコミットにより変わってしまうこと(まったく新しいデータの出現(幻の出現))
結論
INSERT、UPDATE、DELETEに焦点をあてるのではなく、読み込んだ「行」または「範囲」の違い、という認識に変えると、個人的に理解しやすく腑に落ちました。この理解でいくと書籍の記載が近いですが、やはり日本語は難しい…。結局AIで調べた内容ではありますが、書き留めておきたいと感じたので記事に起こしました。この理解であっているといいな。
調査の参考にさせていただいた記事