【MySQL】事務隔離級別

一、事務隔離級別

1. READ UNCOMMITTED(讀未提交)

一個事務還沒提交時,它做的變更就能被別的事務看到。

2. READ COMMITTED (讀提交)

一個事務提交之後,它做的變更纔會被其他事務看到。

3. REPEATABLE READ (可重複讀)

一個事務執行過程中看到的數據,總是跟這個事務在啓動時看到的數據是一致的。當然在可重複讀隔離級別下,未提交變更對其他事務也是不可見的。

4. SERIALIZABLE(可串行化)

它是事務的最高隔離級別。對於同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”,當出現讀寫鎖衝突的時候,後訪問的事務必須等前一個事務執行完成,才能繼續執行。
實際應用中很少用,只有在非常需要確保數據一致性且可以接受沒有併發情況下,才考慮採用該級別。

二、隔離級別解決的問題

髒讀(dirty read):如果一個事務讀到了另一個未提交事務修改過的數據。
在這裏插入圖片描述
不可重複讀(non-repeatable read):如果一個事務只能讀到另一個已經提交的事務修改過的數據,並且其他事務每對該數據進行一次修改並提交後,該事務都能查詢得到最新值。
在這裏插入圖片描述
幻讀(phantom read):如果一個事務先根據某些條件查詢出一些記錄,之後另一個事務又向表中插入了符合這些條件的記錄,原先的事務再次按照該條件查詢時,能把另一個事務插入的記錄也讀出來。
在這裏插入圖片描述

三、如何設置事務的隔離級別?

SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL level;

四、如何啓動事務?

事務啓動一般是:

  1. 顯式啓動事務語句, begin 或 start transaction,配套的提交語句是commit,回滾語句是rollback。
  2. set autocommit=0,這個命令會將這個線程的自動提交關掉,意味着如果你只執行一個select語句,這個事務就啓動了,而且並不會自動提交。這個事務持續存在直到你主動執行commit 或 rollback 語句,或者斷開連接。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章