資料庫事務具有 acid 這4個特性
多個併發執行的事務,如果操作時涉及同一條記錄資料,可能會發生問題,即併發操作可能導致資料的不一致問題,這些問題包含以下3種情形:
為了避免(不是解決)上述可能出現的資料不一致問題,資料庫系統提供了隔離級別(isolation level)這一機制。
sql標準定義了4種隔離級別:
1.read uncommitted(可以讀取未提交資料)
2.read committed(可以讀取已提交資料)
3.repeatable read(可重複讀)
4.serializable(可序列化)
各種隔離級別分別對應可能出現的資料不一致的情況(y標誌可能出現):
隔離級別(isolation level )
髒讀(dirty read)
不可重複讀(non repeatable read)
幻讀(phantom read)
read uncommittedyy
yread committed-y
yrepeatable read--
yserializable--
-read uncommitted、read committed、repeatable read、serializable 這4種隔離級別,按隔離級別嚴格程度劃分,read uncommitted隔離級別最低,serializable隔離級別最嚴,隔離級別越嚴格,安全性越高,越能保證資料的一致性,但對併發效能的影響也越大,所謂「魚與熊掌不可兼得」吧。例如,對於serializable隔離級別,由於事務是序列執行,即所有事務按照次序依次執行,所以效率會大大下降,應用程式的效能會急劇降低。實際專案使用時需要權衡「利弊」,比如mysql中的innodb引擎,其為了兼顧安全與效能,預設的隔離級別就是repeatable read,然後採取隔離級別之外的措施來避免「幻讀」的問題。
資料庫事務
事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質 原子性 atomicity 事務中的操作要麼全部成功,要麼全部失敗。一致性 consistency 事務執行前後要保持資料庫的一致性。隔離性 iso...
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...