資料庫基礎
在SQL標準規格所定義的隔離等級中,關於READ COMMITTED下可能發生之現象的組合,下列何者正確?
- A髒讀、不可重複讀取、幻影讀取都不會發生
- B不會發生髒讀,但可能發生不可重複讀取與幻影讀取
- C不會發生髒讀與不可重複讀取,但可能發生幻影讀取
查看答案與解析
正確答案:B. 不會發生髒讀,但可能發生不可重複讀取與幻影讀取
SQL標準規格依可防止之現象由少到多的順序,定義了READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE共4個隔離等級。在READ UNCOMMITTED下,3種現象都可能發生。READ COMMITTED只讀取已提交的資料,因此能防止髒讀,但每次讀取都會看到當下已提交的值,因此可能發生不可重複讀取與幻影讀取。REPEATABLE READ進一步防止不可重複讀取,但仍可能發生幻影讀取。SERIALIZABLE能防止全部3種現象,保證結果與依某種順序逐一執行交易時相同。隔離等級越高,等待鎖與重新執行的情況越多,能同時處理的量也越少,因此要依用途選擇。實際的DBMS中,預設的隔離等級以及各等級實際能防止的現象,有時比標準規格的最低要求更嚴格。
- A. 3種都不會發生的是SERIALIZABLE。
- B. 正確。READ COMMITTED只防止髒讀。
- C. 這是REPEATABLE READ的性質。