資料
交易(transaction)
交易(transaction)把好幾處資料庫改動捆成一個「要麼全成、要麼全不成」的單元:要麼每一步一起成功,要麼一步都不發生。這是資料庫用來保證你絕不會卡在半途的辦法——那些本該是一個不可分割動作的事,不會做到一半就停住。
最經典的例子是轉帳。轉 100 元意味著從一個帳戶扣錢、並往另一個帳戶加錢——這兩步必須成對出行。把它們裹進一個交易,萬一第二步失敗了(或者兩步之間斷了電),資料庫會把第一步也倒回去。錢永遠不會「移動到一半」——從一邊消失了,卻沒到另一邊。
實際操作中,你先 BEGIN 開啟一個交易,做出改動,再 COMMIT 把它們一併鎖定生效——或者一旦出岔子,就 ROLLBACK 把整批撤銷。在你提交之前,這一切就當還沒發生過,別的使用者也看不到你做了一半的活兒。
BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
兩條更新在 COMMIT 時一起落地——若中途出錯,則一條都不落地。
這種「全有或全無」的保證,就是 ACID 裡的「A」(原子性)——ACID 是可靠的關聯式資料庫就交易做出的那一組承諾。
又稱
另見