October 13, 2023

Viiisit [Database] - 資料庫 Transaction 與 ACID!

#database

今天來點資料庫 Transaction 與 ACID!

前情提要

當我們試圖新增、修改或建立資料,並在進行這些操作時發生無法將資料存入資料庫的情況,
資料庫會發生什麼事?

我用 Rails 建立的註冊功能,當要在使用者資料表中新增一個新的使用者,可能由於某種原因(例如,唯一性約束違反或欄位的格式錯誤),無法成功將新使用者的資料存入資料庫,就會出現這樣:
Transaction Rollback

仔細看會發現到我們觸發 Transaction 的回滾(Rollback)!
但是,為什麼會這樣?我們接著往下看:

Database Transaction 交易(事務)

Database Transaction 稱為資料庫交易或者事務,以下直接用 Transaction 來表示。

Transaction 是資料庫管理系統中的重要概念,用於確保資料庫操作的一致性、完整性和持久性,
在資料庫操作中,Transaction 是一組相關的操作被視為一個不可分割的工作,要麼全部成功執行,要麼全部失敗,不允許中途取消或中斷。

Transaction 這個工作單元可以包含一個或多個資料庫操作,例如讀取資料、寫入資料或更新資料,而這些操作必須以原子性的方式執行。原子性意味著無論何時,這個工作單元的操作要麼全部完成並永久保存到資料庫,要麼全部回滾並恢復到操作之前的狀態。

透過簡單的轉帳功能來看看 Transaction 的整體操作:

如果在 Transaction 的任何階段出現問題,例如帳戶餘額不足或系統故障,Transaction 會被 Rollback(回滾),這意味著所有操作都會取消,以確保帳戶的一致性和完整性。這個過程確保了即使在不確定情況下,轉帳操作也不會導致資料庫狀態的混亂或錯誤。

Transaction 四大特性:ACID

在資料庫管理中,確保數據的完整性和可靠性是很重要的,
因此,我們需要謹慎管理資料庫操作,特別是當多個操作需要以原子方式執行時。
這就是接下來要說明的 Transaction 四大特性 - ACID:

這些特性確保每個 Transaction 都能夠安全、可靠地執行。
Transaction 的使用對於保證資料庫的完整性和可靠性非常重要,
特別是在多用戶環境下,其中多個用戶可以同時訪問和修改資料庫。
當一組操作需要以原子方式執行,以確保資料的一致性時,Transaction 成為一個關鍵的概念。

今天就到這啦!下篇見~!


參考資料:
[極短篇] 資料庫的 ACID 是什麼?
ACID 是什麼?請解釋 ACID 特性?
Database Transaction & ACID