什麼是交易
把對資料庫的一連串處理合併為一個單位來處理者。以COMMIT確定處理結果,以ROLLBACK回到開始前的狀態。DBMS利用鎖與日誌加以管理,使其滿足原子性、一致性、隔離性與持久性(ACID特性)。
日文名稱: トランザクション
「交易」出現在1領域的13道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
把對資料庫的一連串處理合併為一個單位來處理者。以COMMIT確定處理結果,以ROLLBACK回到開始前的狀態。DBMS利用鎖與日誌加以管理,使其滿足原子性、一致性、隔離性與持久性(ACID特性)。
日文名稱: トランザクション
「交易」出現在1領域的13道練習題中(資料庫基礎等)。
這個名詞所屬的領域: 資料庫基礎
在銀行轉帳中,從帳戶A扣款與存入帳戶B兩項處理都完成,結果才正確。交易把這樣的一連串處理合併為一個單位,最後執行COMMIT時結果確定,途中發生錯誤等情況時執行ROLLBACK,交易中的所有修改都會被取消。尚未COMMIT的修改在發生故障時也會被取消,不會留下只反映部分修改的不完整狀態。
許多使用者同時使用資料庫時,多筆交易會讀寫相同的資料。若不加控制,就會發生一方的修改被另一方覆寫而遺失(遺失修改,Lost update)、讀取到尚未提交的資料(髒讀)等問題。DBMS利用使用共享鎖與排他鎖的並行控制,或保留修改前的版本供讀取使用的多版本並行控制(MVCC)等,防止交易之間的干擾。要防止到什麼程度,則以隔離等級來選擇。
DBMS把修改前後的值記錄在日誌中,並在寫入資料庫本體之前先把日誌寫入儲存裝置。發生故障後,依據日誌重做已提交之交易的修改(前滾),並取消未提交之交易的修改(回復),回到正確的狀態。定期取檢查點,可以縮短復原時要追溯的日誌範圍。
正確答案:B. 兩個UPDATE都被取消,回到交易開始前的狀態
交易是把對資料庫的一連串處理合併為一個單位來處理的機制。在交易中進行的更新,執行COMMIT後就會確定,執行ROLLBACK則全部取消,回到交易開始前的狀態。在這個例子中,帳戶A的減算與帳戶B的加算都會被取消,兩個帳戶的餘額維持原狀。轉帳途中發生錯誤時執行ROLLBACK,就不會留下只更新了一個帳戶的不完整狀態。若只想取消一部分,也可以用SAVEPOINT在中途做記號,再以 ROLLBACK TO SAVEPOINT 回到該處。
由應用程式執行ROLLBACK,或由DBMS進行故障復原處理,該交易中的所有修改都會被取消,不會只留下部分修改。
會長時間持有鎖,使其他交易必須等待,能同時處理的量減少,也更容易發生死結。基本上,交易應在維持一致性所需的範圍內盡量縮短。
交易是把對資料庫的一連串處理合併為一個單位來處理的機制。
在帳戶表格中開始一筆交易,執行從帳戶A的餘額減去300的UPDATE,以及在帳戶B的餘額加上300的UPDATE。之後…ACID特性取自交易應滿足之4項性質的字首。
在交易應具備的ACID特性中,「從帳戶A扣款並存入帳戶B的轉帳處理,即使途中發生故障,也只會是兩者都完成或完全不進行」…若進行更新的交易之後回復(ROLLBACK),讀到的值就成為從未確定過的值,以此為基礎的處理也會出錯。
在同時執行交易時發生的問題中,下列何者正確說明了髒讀(Dirty read)?在同一筆交易中重複相同條件的搜尋時,因為期間其他交易新增(或刪除)了符合條件的資料列並提交,使結果的資料列集合改變的現象,稱為幻影讀取(Phantom read)。
交易T1執行 SELECT COUNT(*) FROM 訂單 WHERE 金額 >= 1000,結果為8筆。緊接著T2…共享鎖是讀取資料時所加的鎖,其他交易也能對同一資料加上共享鎖同時讀取,但無法加上用於寫入的排他鎖。
交易T1對某筆資料列加上共享鎖並正在讀取。T2對這筆資料列要求共享鎖,T3要求排他鎖。在T1解除鎖之前的期間,下列何者…