為了滿足上述的2個目標Database Transaction需要滿足ACID Property:
當我們談論資料庫的ACID,我們是在描述一組保證資料庫交易正確和可靠的屬性。ACID代表原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),這四大特性確保了資料庫交易的可靠性和資料的安全性:
BEGIN;
SQL queries;
...
COMMIT;
BEGIN;
SQL queries
...
ROLLBACK;
Database必需滿足ACID的屬性,其中Isolation是四個屬性之一,其在最高Level的情況下會確保所有的Transaction不會相互影響。
同時運行其他Transaction 下有幾種方法可以產生干擾,而這干擾就稱為Read Phenomena
:
如果一個 transaction 還沒有 commit,但是你卻讀得到已經更新的結果,這個情形叫做 Dirty Read
如果你在同一個 transaction 裡面連續使用相同的 Query 讀取了多次資料,但是相同的 Query 卻回傳了不同的結果,這個現象稱為 Non-repeatable reads
當在同一個 transaction 連續兩次讀取時,讀取出來的筆數跟上次不同,這個情況稱為 Phantom reads
在成功提交一群交易後,結果與以所有可能的順序依序執行交易的結果都不一致
ANSI其定義SQL不同的 Isolation 等級來標明哪個等級的 Isolation 可以解決上述問題: