对事务的特性ACID的理解
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 對事務的特性ACID的理解
數據庫的事務必須具備ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔離型)和Durability(持久性)的英文縮寫。
?
1、原子性(Atomicity)
事務包裝的一組sql,要么都執行成功,要么都失敗。這些操作是不可分割的。
2、一致性(Consistency)
??????? 數據庫的數據狀態是一致的。
事務的成功與失敗,最終數據庫的數據都是符合實際生活的業務邏輯。一致性絕大多數依賴業務邏輯和原子性。
3、持久性:(Durability)
事務成功提交之后,對于數據庫的改變是永久的。哪怕數據庫發生異常,重啟之后數據亦然存在。
4、隔離性(Isolation)
??????? 一個事務的成功或者失敗對于其他的事務是沒有影響。2個事務應該相互獨立。
?
事務的隔離級別
如果不考慮事務的隔離性,由于事務的并發,將會出現以下問題:
1、臟讀 -- 最嚴重,杜絕發生
2、不可重復讀
3、幻讀(虛讀)
?臟讀:指一個事務讀取了另外一個事務 未提交的數據。
? ? ? ? ? 一個事務讀取了另一個事務沒有提交的數據,非常嚴重。應當盡量避免臟讀。
?
?不可重復讀:在一個事務內多次讀取表中的數據,多次讀取的結果不同。
?
? 幻讀(虛讀)
?
?
?
?隔離級別:如何解決問題
?
l? 數據庫規范規定了4種隔離級別,分別用于描述兩個事務并發的所有情況。
a)?????? 存在:3個問題(臟讀、不可重復讀、虛讀)。
b)?????? 解決:0個問題
a)?????? 存在:2個問題(不可重復讀、虛讀)。
b)?????? 解決:1個問題(臟讀)
a)?????? 存在:1個問題(虛讀)。
b)?????? 解決:2個問題(臟讀、不可重復讀)
a)?????? 存在:0個問題。
b)?????? 解決:3個問題(臟讀、不可重復讀、虛讀)
?安全和性能對比
? ? ? 安全性:serializable > repeatable read > read committed > read uncommitted
? ?性能 : serializable < repeatable read < read committed < read uncommitted
常見數據庫的默認隔離級別:
? MySql:repeatable read
Oracle:read committed
?
? 演示
?查詢數據庫的隔離級別
show variables like '%isolation%'; 或 select @@tx_isolation;設置數據庫的隔離級別
set session transaction isolation level 級別字符串
?級別字符串:read uncommitted、read committed、repeatable read、serializable
? 例如:set session transaction isolation level read uncommitted;
?
? 讀未提交:read uncommitted ? A窗口設置隔離級別 ? AB同時開始事務 ? A 查詢 ? B 更新,但不提交 ? A 再查詢?-- 查詢到了未提交的數據 ? B 回滾 ? A 再查詢?-- 查詢到事務開始前數據? 讀已提交:read committed ? A窗口設置隔離級別 ? AB同時開啟事務 ? A查詢 ? B更新、但不提交 ? A再查詢?--數據不變,解決問題【臟讀】 ? B提交 ? A再查詢?--數據改變,存在問題【不可重復讀】? 可重復讀:repeatable read ? A窗口設置隔離級別 ? AB 同時開啟事務 ? A查詢 ? B更新, 但不提交 ? A再查詢?--數據不變,解決問題【臟讀】 ? B提交 ? A再查詢?--數據不變,解決問題【不可重復讀】 ? A提交或回滾 ? A再查詢?--數據改變,另一個事務? 串行化:serializable ? A窗口設置隔離級別 ? AB同時開啟事務 ? A查詢 ? B更新?--等待(如果A沒有進一步操作,B將等待超時) ? A回滾 ? B 窗口?--等待結束,可以進行操作
轉載于:https://www.cnblogs.com/daiwei1981/p/9338420.html
總結
以上是生活随笔為你收集整理的对事务的特性ACID的理解的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 掌上生活app
- 下一篇: lucene 第一天
