# ACID

## 交易的基本要求

一個交易可能包含對資料庫進行一連串 CRUD。

為了確保**交易是可靠的**，具備 ACID 的特性是**基本要求**。

## 原子性 - Atomicity

一個事務中的所有操作(或運算)，不是完全做完 (commit) 就是完全不做 (rollback)。

不會中斷在某個環節，若不幸中斷，則必須恢復到交易之前的狀態。

## 一致性 - Consistency

交易前與交易後都沒有破壞資料庫的完整性，也就是完全符合資料庫訂定的規則。

交易中產生得資料(或驗證狀態修改)，錯誤發生時，已更改的資料或狀態必須恢復到交易之前。

## 隔離行為 - Isolation behavior

同一筆資料在事務尚未完成之前，不能讓其他其他的事務干擾其執行。

也就是**預防並發情形**( synchronization)可能造成的錯誤。

{% content-ref url="acid/jiao-yi-bing-fa-wen-ti" %}
[jiao-yi-bing-fa-wen-ti](https://wangkh.gitbook.io/database/transaction-manager/acid/jiao-yi-bing-fa-wen-ti)
{% endcontent-ref %}

## 持續性 - Durability

交易一旦完成，資料的變更就永久有效，不會因為任何原因導致資料遺失。

即使系統故障也不影響，一般搭配資料庫備份，或透過 log 紀錄。

## 參考資料

<https://openhome.cc/Gossip/EJB3Gossip/TransactionABC.html>\
\
<https://medium.com/@totoroLiu/%E8%B3%87%E6%96%99%E5%BA%AB-acid-bb87324035a8>
