資料庫基礎

在SQL標準規格所定義的隔離等級中,關於READ COMMITTED下可能發生之現象的組合,下列何者正確?

  1. A髒讀、不可重複讀取、幻影讀取都不會發生
  2. B不會發生髒讀,但可能發生不可重複讀取與幻影讀取
  3. 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的性質。
練習這個領域 前往領域頁面

相關計算工具

資料庫基礎的其他題目

  1. 交易T1對某筆資料列加上共享鎖並正在讀取。T2對這筆資料列要求共享鎖,T3要求排他鎖。在T1解除鎖之前的期間,下列何者正確?
  2. 關於交易的並行控制所使用的兩階段鎖定(2PL),下列敘述何者正確?
  3. 交易T1對資料列A加上排他鎖後要求資料列B的鎖,T2對資料列B加上排他鎖後要求資料列A的鎖,結果兩者都無法繼續。DBMS偵測到這個狀態時,一般的處理方式是下列何者?
  4. 許多DBMS在更新資料時,會把更新內容記錄在日誌中,並在寫入資料庫本體之前,先把日誌寫入非揮發性儲存裝置(WAL:預寫式日誌)。採用此方式的主要理由是下列何者?
  5. 有交易T1~T5,在發生故障前取了一次檢查點。T1在檢查點之前開始並提交。T2與T3在檢查點之前開始,T2在檢查點之後、故障之前提交,T3在故障時尚未提交。T4與T5在檢查點之後開始,T4在故障前提交,T5尚未提交。故障後的復原中,需要使用日誌進行前滾(Rollforward)的交易是下列何者?