1、事務的特性(ACID):
原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作要么全部完成,要么完全不起作用。
一致性(Consistency):執行事務前后,必須是所有的數據都保持一致狀態。
隔離性(Isolation):並發事務執行之間無影響,在一個事務內部的操作對其他事務是不產生影響,這需要事務隔離級別來指定隔離性。
持久性(Durability):一旦事務完成,數據庫的改變必須是持久化的。
2、事務的隔離級別:
為什么會出現事務的隔離級別呢:因為在企業級應用中(高並發的情況下),多用戶訪問數據庫是常見的場景,這就是所謂的事務的並發,事務與事務之間可能產生的影響,事務並發所可能存在的問題:
臟讀:(針對未提交數據)如果一個事務中對數據進行了更新,但事務還沒有提交,另一個事務可以“看到”該事務沒有提交的更新結果,這樣造成的問題就是,如果 第 一 個事務回滾,那么,第二個事務在此之前所“看到”的數據就是一筆臟數據。
不可重復讀:(針對其他提交前后,讀取數據本身的對比)一個事務兩次讀同一行數據,可是這兩次讀到的數據不一樣。不可重復讀取是指同一個事務在整個事務過 程中 對同一筆數據進行讀取,每次讀取結果都不同。如果事務1在事務2的更新操作之前讀取一次數據,在事務2的更新操作之后再讀取同一筆數據一 次,兩 次結果是不同的。
幻讀:(針對其他提交前后,讀取數據條數的對比) 一個事務執行兩次查詢,但第二次查詢比第一次查詢多出了一些數據行。
丟失更新:撤消一個事務時,把其它事務已提交的更新的數據覆蓋了。
不可重復都和幻讀主要的區別是:前者注重的是數據修改,后者是數據添加。
針對並發事務出現的問題,隔離級別就是為了防止這樣的事情發生,根據業務的場景而定:
① Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
② Read committed (讀已提交):可避免臟讀的發生。
③ Repeatable read (可重復讀):可避免臟讀、不可重復讀的發生。
④ Serializable (串行化):可避免臟讀、不可重復讀、幻讀的發生。