事務就是資料庫在進行sql的執行的過程,可以是乙個也可以是多個sql。就是一組sql指令,要麼全部執行成功,若因為某個原因其中一條指令執行有錯誤,則撤銷先前執行過的所有指令。更簡答的說就是:要麼全部執行成功,要麼撤銷不執行。
事務的原子性:表示事務執行過程中的任何失敗都將導致事務所做的任何修改失效。
事務的一致性:表示當事務執行失敗時,所有被該事務影響的資料都應該恢復到事務執行前的狀態。
事務的隔離性:表示在事務執行過程中對資料的修改,在事務提交之前對其他事務不可見。
事務的永續性:表示已提交的資料在事務執行失敗時,資料的狀態都應該正確。
資料庫有以下隔離級別:
① serializable (序列化):可避免髒讀、不可重複讀、幻讀的發生。效率略低。
② repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。一般資料庫普遍使用這個級別。
③ read committed (讀已提交):可避免髒讀的發生。
④ read uncommitted (讀未提交):最低級別,任何情況都無法保證。且效率並不比已提交和可重複讀高多少,所以這個級別一般用不到。
1,髒讀
a事務讀取b事務尚未提交的資料,此時如果b事務發生錯誤並執行回滾操作,那麼a事務讀取到的資料就是髒資料。就好像原本的資料比較乾淨、純粹,此時由於b事務更改了它,這個資料變得不再純粹。這個時候a事務立即讀取了這個髒資料,但事務b良心發現,又用回滾把資料恢復成原來乾淨、純粹的樣子,而事務a卻什麼都不知道,最終結果就是事務a讀取了此次的髒資料,稱為髒讀。
2,不可重複讀
多次讀取資料不一致。
不可重複讀是指在事務1內,讀取了乙個資料,事務1還沒有結束時,事務2也訪問了這個資料,修改了這個資料,並提交。緊接著,事務1又讀這個資料。由於事務2的修改,那麼事務1兩次讀到的的資料可能是不一樣的,因此稱為是不可重複讀。
3,虛讀(幻讀)
就是事務1查詢id<10的記錄時,返回了2條記錄,接著事務2插入了一條id為3的記錄,並提交。接著事務1查詢id<10的記錄時,返回了3條記錄,說好的可重複讀呢?結果卻多了一條資料。
幻讀和不可重複讀都是讀取了另一條已經提交的事務(這點就髒讀不同),所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是一批資料整體(比如資料的個數)。
事務簡單了解
事務簡單了解 serializable 序列化 可避免髒讀 不可重複讀 幻讀的發生。repeatable read 可重複讀 可避免髒讀 不可重複讀的發生。read committed 讀已提交 可避免髒讀的發生。read uncommitted 讀未提交 最低級別,任何情況都無法保證。type包含...
redis事務的簡單了解
redis對事務的支援目前還比較簡單。redis只能保證乙個client發起的事務中的命令可以連續的執行,而中間不會插入其他client的命令。由於redis是單執行緒來處理所有client的請求的所以做到這點是很容易的。一般情況下redis在接受到乙個client發來的命令後會立即處理並 返回處理...
簡單了解Spring中的事務控制
1.事務的概念 事務是一組操作的執行單元,相對於資料庫的單條操作而言,事務管理的是一組sql指令,如增刪改查等,事務的特性體現在事務內包含的sql指令必須全部執行成功,如果其中一條指令發生錯誤,那麼整個事務內的一組操作都要進行回滾。事務有四個特性 2.spring中的事務控制方式 程式設計式事務管理...