資料庫基礎
在同時執行交易時發生的問題中,下列何者正確說明了髒讀(Dirty read)?
- A讀取了其他交易尚未提交的更新,而該交易隨後回復,因此使用了從未存在過的值
- B在同一筆交易中兩次讀取同一筆資料列,因為期間其他交易更新該資料列並提交,值已經改變
- C兩次執行相同條件的搜尋,因為期間其他交易新增資料列並提交,資料列數已經改變
查看答案與解析
正確答案:A. 讀取了其他交易尚未提交的更新,而該交易隨後回復,因此使用了從未存在過的值
髒讀是讀取到尚未提交(尚未確定)之資料的問題。若進行更新的交易之後回復(ROLLBACK),讀到的值就成為從未確定過的值,以此為基礎的處理也會出錯。兩次讀取同一筆資料列而值改變的是不可重複讀取(Non-repeatable read),符合搜尋條件的資料列增減的是幻影讀取(Phantom read)。這些都是交易的隔離性不足時發生的問題,在SQL中透過設定隔離等級,選擇要防止到什麼程度。在READ COMMITTED以上的隔離等級,不會發生髒讀。
- A. 正確。讀取到尚未提交的更新就是髒讀。
- B. 這是不可重複讀取的說明。
- C. 這是幻影讀取的說明。