多個事務同時執(zhí)行時帶來的問題
1. 更新丟失
複數(shù)のトランザクションが同じ行を選択し、その行の元の値を更新すると発生する沪蓬。
トランザクションは互いに相手を意識することがないので脾拆、
ある更新処理による更新データが確定される前に、他の更新処理により変更されてしまうと命雀、
前者のトランザクションで更新したデータが失われてしまうことになる翔始。
當兩個事務讀取同一個行倒脓,其中一個事物導致該行的數(shù)據(jù)更新的時候發(fā)生
在一個事務更新數(shù)據(jù)還未提交撑螺,另外一個事務對該行數(shù)據(jù)進行更新并提交后,將會導致先提交的事務所做的更新丟失崎弃。
2. 臟讀
別のトランザクションにより更新されたが甘晤、まだコミットされていないデータを読んでしまえる。
後者のトランザクションが読み取るデータは饲做、まだコミットされていないので线婚、
行を更新中のトランザクションによって変更される可能性がある。
これはトランザクション処理における機能の條件である「ACID特性」のうち
「C」の文字で表されている「一貫性」(Consistency)と矛盾する盆均。
ダーティーリードを禁止することは比較的容易に実現(xiàn)できるが塞弊、
多くの場合、禁止を実行するとオーバーヘッドを生じさせてしまうことになり、
アプリケーションの実行速度を低下させてしまう游沿。同様に饰抒、システムの平行性を低下させてしまうことも多い。
讀取到被別的事務更新但沒有提交的數(shù)據(jù)诀黍。
因為讀到的是別的事務還沒有提交的數(shù)據(jù)袋坑,所有有被的事務更新的可能性。這和關于事務處理機能所訴的[ACID]特性的[C]眯勾,也就是[一貫性(Consistency)相矛盾枣宫。雖然禁止臟讀很容易實現(xiàn),但大多數(shù)場合下吃环,禁止臟讀會產(chǎn)生額外的開銷也颤,導致應用的執(zhí)行速度降低。同樣的模叙,也常會導致系統(tǒng)并行性降低歇拆。
3. 反復讀取不一致
トランザクション中に鞋屈、繰り返し同じデータを參照するとき范咨、そのつど値が変わってしまう狀態(tài)。
同一トランザクション內(nèi)で厂庇、同じSELECT文が実行された場合に渠啊、同じ照會結果が保証されないことを言う。
反復不能読み取りは权旷、トランザクションがデータを変更中に別のトランザクションがそのデータを読み取るという點で
ダーティリードと似ている替蛉。ただし反復不能読み取りの場合、別のトランザクションが読み取るデータは
変更を行ったトランザクションによってコミットされている拄氯。また躲查、同じ行が複數(shù)回読み取られ、
そのたびにトランザクションによって情報が変更される译柏。そのため镣煮、反復不能読み取りと呼ばれる。
在事務中鄙麦,反復讀取同一數(shù)據(jù)的時候典唇,在每次讀取的時候值發(fā)生變化。
在同一個事務中胯府,同一個SELECT語句執(zhí)行的場合介衔,不能保證查詢結果都是一樣的。
不能反復讀取骂因,關于在事務中數(shù)據(jù)被修改過程中被別的事務讀取的點來說炎咖,和臟讀很像。但是不能反復讀的情況下,別的事務讀取的時當前事務所提交的數(shù)據(jù)乘盼,別的事務針對同一數(shù)據(jù)被多次讀取的情況急迂,在每次讀取數(shù)據(jù)時會應為當前事務的提交而發(fā)生變化,因此被稱作不能反復讀取蹦肴。
4. 幻讀
トランザクション中に僚碎、突然現(xiàn)れたり消えたりしてしまうデータができてしまう聊疲。
その様子から录择、この現(xiàn)象はファントムと呼ばれる。
同一トランザクション內(nèi)で盾似、同じSELECT文を実行した場合に矛双、
別のトランザクションで削除が行われた場合渊抽、2回目以降の読み取りにおいて、
最初の読み取りで得られた行のデータが得られなくなったり议忽、
別のトランザクションで挿入が行われた場合懒闷、2回目以降の読み取りにおいて、
最初の読み取りで得られなかった行のデータが読み取られてしまう栈幸。
在一個事務中愤估,突然出現(xiàn)或消失數(shù)據(jù)的現(xiàn)象被稱作幻讀。
同一個事務中速址,最初讀取到的數(shù)據(jù)被別的事務刪除玩焰,在第2次用相同的SELECT語句卻讀取不到∩置或者說最初沒有讀取到的數(shù)據(jù)昔园,因為別的事務的插入操作導致第2次卻讀取到。