資料庫基礎

在同時執行交易時發生的問題中,下列何者正確說明了髒讀(Dirty read)?

  1. A讀取了其他交易尚未提交的更新,而該交易隨後回復,因此使用了從未存在過的值
  2. B在同一筆交易中兩次讀取同一筆資料列,因為期間其他交易更新該資料列並提交,值已經改變
  3. C兩次執行相同條件的搜尋,因為期間其他交易新增資料列並提交,資料列數已經改變
查看答案與解析

正確答案:A. 讀取了其他交易尚未提交的更新,而該交易隨後回復,因此使用了從未存在過的值

髒讀是讀取到尚未提交(尚未確定)之資料的問題。若進行更新的交易之後回復(ROLLBACK),讀到的值就成為從未確定過的值,以此為基礎的處理也會出錯。兩次讀取同一筆資料列而值改變的是不可重複讀取(Non-repeatable read),符合搜尋條件的資料列增減的是幻影讀取(Phantom read)。這些都是交易的隔離性不足時發生的問題,在SQL中透過設定隔離等級,選擇要防止到什麼程度。在READ COMMITTED以上的隔離等級,不會發生髒讀。

  • A. 正確。讀取到尚未提交的更新就是髒讀。
  • B. 這是不可重複讀取的說明。
  • C. 這是幻影讀取的說明。
練習這個領域 前往領域頁面

相關計算工具

資料庫基礎的其他題目

  1. 交易T1執行 SELECT COUNT(*) FROM 訂單 WHERE 金額 >= 1000,結果為8筆。緊接著T2以INSERT新增一筆金額2000的訂單並提交。T1再次執行相同的SELECT敘述,結果變為9筆。這個現象是下列何者?
  2. 在SQL標準規格所定義的隔離等級中,關於READ COMMITTED下可能發生之現象的組合,下列何者正確?
  3. 交易T1對某筆資料列加上共享鎖並正在讀取。T2對這筆資料列要求共享鎖,T3要求排他鎖。在T1解除鎖之前的期間,下列何者正確?
  4. 關於交易的並行控制所使用的兩階段鎖定(2PL),下列敘述何者正確?
  5. 交易T1對資料列A加上排他鎖後要求資料列B的鎖,T2對資料列B加上排他鎖後要求資料列A的鎖,結果兩者都無法繼續。DBMS偵測到這個狀態時,一般的處理方式是下列何者?