事務的隔離級別有4種,由低到高分別為Read uncommitted 、Read committed 、Repeatable read 、Serializable 。事物的並發操作中可能休閑臟讀,不可重復讀,幻讀。
1、第壹種隔離級別:Read uncommitted(讀未提交)
如果壹個事務已經開始寫數據,則另外壹個事務不允許同時進行寫操作,但允許其他事務讀此行數據,該隔離級別可以通過“排他寫鎖”,但是不排斥讀線程實現。這樣就避免了更新丟失,卻可能出現臟讀,也就是說事務B讀取到了事務A未提交的數據。
解決了更新丟失,但還是可能會出現臟讀。
2、第二種隔離級別:Read committed(讀提交)
如果是壹個讀事務(線程),則允許其他事務讀寫,如果是寫事務將會禁止其他事務訪問該行數據,該隔離級別避免了臟讀,但是可能出現不可重復讀。事務A事先讀取了數據,事務B緊接著更新了數據,並提交了事務,而事務A再次讀取該數據時,數據已經發生了改變。
解決了更新丟失和臟讀問題。
3、第三種隔離級別:Repeatable read(可重復讀取)
可重復讀取是指在壹個事務內,多次讀同壹個數據,在這個事務還沒結束時,其他事務不能訪問該數據,這樣就可以在同壹個事務內兩次讀到的數據是壹樣的,因此稱為是可重復讀隔離級別,讀取數據的事務將會禁止寫事務,寫事務則禁止任何其他事務,這樣避免了不可重復讀和臟讀,但是有時可能會出現幻讀。
讀取數據的事務可以通過“***享讀鏡”和“排他寫鎖”實現。
解決了更新丟失、臟讀、不可重復讀、但是還會出現幻讀。
4、第四種隔離級別:Serializable(可序化)
提供嚴格的事務隔離,它要求事務序列化執行,事務只能壹個接著壹個地執行,但不能並發執行,如果僅僅通過“行級鎖”是無法實現序列化的,必須通過其他機制保證新插入的數據不會被執行查詢操作的事務訪問到。
序列化是最高的事務隔離級別,同時代價也是最高的,性能很低,壹般很少使用,在該級別下,事務順序執行,不僅可以避免臟讀、不可重復讀,還避免了幻讀。
事務的基本要素(ACID)
1、原子性(Atomicity):事務開始後所有操作,要麽全部做完,要麽全部不做,不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,所有的操作就像沒有發生壹樣。也就是說事務是壹個不可分割的整體,就像化學中學過的原子,是物質構成的基本單位。
2、壹致性(Consistency):事務開始前和結束後,數據庫的完整性約束沒有被破壞 。比如A向B轉賬,不可能A扣了錢,B卻沒收到。 ?
3、隔離性(Isolation):同壹時間,只允許壹個事務請求同壹數據,不同的事務之間彼此沒有任何幹擾。比如A正在從壹張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。
4、持久性(Durability):事務完成後,事務對數據庫的所有更新將被保存到數據庫,不能回滾。
以上內容參考:事務隔離級別 - 百度百科