資料庫基礎

在帳戶表格中開始一筆交易,執行從帳戶A的餘額減去300的UPDATE,以及在帳戶B的餘額加上300的UPDATE。之後執行ROLLBACK而非COMMIT。帳戶表格會變成怎樣?

  1. A只有對帳戶B的加算被取消,帳戶A的減算保留
  2. B兩個UPDATE都被取消,回到交易開始前的狀態
  3. CUPDATE已經執行,因此兩者都不會被取消
查看答案與解析

正確答案:B. 兩個UPDATE都被取消,回到交易開始前的狀態

交易是把對資料庫的一連串處理合併為一個單位來處理的機制。在交易中進行的更新,執行COMMIT後就會確定,執行ROLLBACK則全部取消,回到交易開始前的狀態。在這個例子中,帳戶A的減算與帳戶B的加算都會被取消,兩個帳戶的餘額維持原狀。轉帳途中發生錯誤時執行ROLLBACK,就不會留下只更新了一個帳戶的不完整狀態。若只想取消一部分,也可以用SAVEPOINT在中途做記號,再以 ROLLBACK TO SAVEPOINT 回到該處。

  • A. ROLLBACK不只取消最後一個敘述,而是取消交易中的所有更新。
  • B. 正確。尚未COMMIT的更新全部取消,回到開始前的狀態。
  • C. COMMIT之前的更新尚未確定,因此會被ROLLBACK取消。
練習這個領域 前往領域頁面

相關計算工具

資料庫基礎的其他題目

  1. 在交易應具備的ACID特性中,「從帳戶A扣款並存入帳戶B的轉帳處理,即使途中發生故障,也只會是兩者都完成或完全不進行」的性質是下列何者?
  2. 庫存表格中某商品的庫存數為10。交易T1讀出庫存數後寫入減3的值,T2讀出庫存數後寫入減5的值。若不加鎖,依T1讀取、T2讀取、T1寫入、T2寫入的順序執行,最後的庫存數為多少?
  3. 在同時執行交易時發生的問題中,下列何者正確說明了髒讀(Dirty read)?
  4. 交易T1執行 SELECT COUNT(*) FROM 訂單 WHERE 金額 >= 1000,結果為8筆。緊接著T2以INSERT新增一筆金額2000的訂單並提交。T1再次執行相同的SELECT敘述,結果變為9筆。這個現象是下列何者?
  5. 在SQL標準規格所定義的隔離等級中,關於READ COMMITTED下可能發生之現象的組合,下列何者正確?