Skip to content

Transaction

交易(資料庫交易)

01你是不是遇到這個 / THE SYMPTOM

我要連續改好幾個地方,例如轉帳要「A 扣錢」加「B 加錢」兩步。我怕做到一半程式掛掉,結果只扣了錢沒加到,資料就壞了。我想要這幾步「要嘛全部成功、要嘛全部當沒發生」。

↑ 如果你點頭了,你要的關鍵字就是 Transaction

02這是什麼 / DEFINITION

交易是把多個資料庫操作包成一個不可分割的單位,全部成功才一起生效(commit),中間任何一步失敗就整個回復原狀(rollback),確保資料不會停在做一半的壞狀態。

03什麼時候用 / WHEN TO USE

任何「多個寫入必須同生共死」的情境:轉帳、下單同時扣庫存、註冊同時建多張關聯表。只要中途失敗會造成資料不一致,就該用交易包起來。

04怎麼跟 AI 說 / HOW TO ASK

直接複製這句、貼進 Claude Code / Cursor / Copilot / ChatGPT:

把扣款和入帳這兩個 UPDATE 包進一個 database transaction(交易)裡,任何一步失敗就 rollback 全部回滾,全部成功才 commit。
05常見坑 / WATCH OUT

交易不是開了就萬無一失:交易開太久(裡面夾 API 呼叫、慢查詢)會長時間鎖住資料列、拖垮並發。常和「鎖(lock)」「死結(deadlock)」一起出問題。也別把不相干的操作硬塞進同一個交易。

06相關的詞 / RELATED