資料庫基礎
在帳戶表格中開始一筆交易,執行從帳戶A的餘額減去300的UPDATE,以及在帳戶B的餘額加上300的UPDATE。之後執行ROLLBACK而非COMMIT。帳戶表格會變成怎樣?
- A只有對帳戶B的加算被取消,帳戶A的減算保留
- B兩個UPDATE都被取消,回到交易開始前的狀態
- CUPDATE已經執行,因此兩者都不會被取消
查看答案與解析
正確答案:B. 兩個UPDATE都被取消,回到交易開始前的狀態
交易是把對資料庫的一連串處理合併為一個單位來處理的機制。在交易中進行的更新,執行COMMIT後就會確定,執行ROLLBACK則全部取消,回到交易開始前的狀態。在這個例子中,帳戶A的減算與帳戶B的加算都會被取消,兩個帳戶的餘額維持原狀。轉帳途中發生錯誤時執行ROLLBACK,就不會留下只更新了一個帳戶的不完整狀態。若只想取消一部分,也可以用SAVEPOINT在中途做記號,再以 ROLLBACK TO SAVEPOINT 回到該處。
- A. ROLLBACK不只取消最後一個敘述,而是取消交易中的所有更新。
- B. 正確。尚未COMMIT的更新全部取消,回到開始前的狀態。
- C. COMMIT之前的更新尚未確定,因此會被ROLLBACK取消。