事務所提供的安全保證,通常由眾所周知的首字母縮略詞acid來描述,acid代表原子性(atomicity),一致性(consistency),隔離性(isolation)和永續性(durability)。
乙個事務是乙個不可分割的工作單位,其中的操作要麼都做,要麼都不做。
特徵是能夠在錯誤時終止事務,丟棄該事務進行的所有寫入變更的能力
保證事務只能把資料庫從乙個有效(正確)的狀態「轉移」到另乙個有效(正確)的狀態
原子性,隔離性和永續性是資料庫的屬性,而一致性(在acid意義上)是應用程式的屬性。應用可能依賴資料庫的原子性和隔離屬性來實現一致性,但這並不僅取決於資料庫。
多個事務併發執行的時候,事務內部的操作與其他事務是隔離的,併發執行的各個事務之間不能互相干擾
事務一旦提交,它對資料庫的改變就應該是永久性的
事務中的修改,即使沒有提交,對於其他事務也是可見的。
可能存在的問題:事務讀取未提交的資料,稱為髒讀。
可以滿足acid中隔離性的定義,即乙個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。
可能存在的問題:也叫不可重複讀,因為在同乙個事務中執行兩次同樣的查詢,可能得到不一樣的結果。(前後多次讀取,資料內容不一致)
解決了髒讀的問題,該級別保證了在同乙個事務中多次讀取同樣的記錄的結果是一致的
可能存在的問題:幻讀。即當某個事務讀取某個範圍內的記錄時,另外乙個事務在該範圍內插入了新的記錄,導致之前的事務再次讀取該範圍內的記錄時,會多讀取出記錄,產生幻行。(前後多次讀取,資料總量不一致)
mysql預設的隔離級別是可重複讀
最高的隔離級別,通過強制事務序列執行,解決髒讀,不可重複讀,幻讀的問題。
(1) 不可重複讀是讀取了其他事務更改的資料,針對update操作
解決:使用行級鎖,鎖定該行,事務a多次讀取操作完成後才釋放該鎖,這個時候才允許其他事務更改剛才的資料。
(2) 幻讀是讀取了其他事務新增的資料,針對insert和delete操作
解決:使用表級鎖,鎖定整張表,事務a多次讀取資料總量之後才釋放該鎖,這個時候才允許其他事務新增資料。
正如其名,它指的是對資料被外界(包括本系統當前的其他事務,以及來自外部系統的事務處理)修改持保守態度,因此,在整個資料處理過程中,將資料處 於鎖定狀態。
悲觀鎖的實現,往往依靠資料庫提供的鎖機制(也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機 制,也無法保證外部系統不會修改資料)。
在悲觀鎖的情況下,為了保證事務的隔離性,就需要一致性鎖定讀。讀取資料時給加鎖,其它事務無法修改這些資料。修改刪除資料時也要加鎖,其它事務無法讀取這些資料。
相對悲觀鎖而言,樂觀鎖機制採取了更加寬鬆的加鎖機制。悲觀鎖大多數情況下依靠資料庫的鎖機制實現,以保證操作最大程度的獨占性。但隨之而來的就是資料庫效能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。
而樂觀鎖機制在一定程度上解決了這個問題。樂觀鎖,大多是基於資料版本( version )記錄機制實現。
何謂資料版本?即為資料增加乙個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加乙個 「version」 欄位來實現。讀取出資料時,將此版本號一同讀出,之後更新時,對此版本號加一。
此時,將提交資料的版本資料與資料庫表對應記錄的當前版本資訊進行比對,如 果提交的資料版本號大於資料庫表當前版本號,則予以更新,否則認為是過期資料。
事務的特性ACID 隔離級別
1.事務特性acid 1.1 事務的四大特性 1 原子性 atomicity 事務包裝的一組sql,要麼都執行成功,要麼都失敗。這些操作是不可分割的。2 一致性 consistency 資料庫的資料狀態是一致的。3 永續性 durability 事務成功提交之後,對於資料庫的改變是永久的。哪怕資料庫...
事務的ACID與隔離級別
事務是應用程式中一系列嚴密的操作,所有操作必須一起成功完成,否則在每個操作中進行的更改都會被撤銷。事務具有四個特徵 1.原子性 atomicity 事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都完成,要麼都不完成。2.一致性 consistency 事務執行的結果必須是使資料庫從乙個一致性狀態...
事務的ACID特性和事務的隔離級別
事務transaction acid特性 atomic consistency isolation durability 原子性 事務對資料庫的操作要不全部執行,要不全部不執行,通常事務開始時就將記錄這次修改,原始資料,修改後的資料都儲存在日誌當中,一旦事務中斷,就從日誌裡恢復原來的值 一致性 事務...