隔離級別參數transaction_isolation


隔離級別參數transaction_isolation

 

  • 讀未提交是指,一個事務還沒提交時,它做的變更就能被別的事務看到。
  • 讀提交是指,一個事務提交之后,它做的變更才會被其他事務看到。
  • 可重復讀是指,一個事務執行過程中看到的數據,總是跟這個事務在啟動時看到的數據是一致的。當然在可重復讀隔離級別下,未提交變更對其他事務也是不可見的。
  • 串行化,顧名思義是對於同一行記錄,“寫”會加“寫鎖”,“讀”會加“讀鎖”。當出現讀寫鎖沖突的時候,后訪問的事務必須等前一個事務執行完成,才能繼續執行。

 

read-uncommitted:讀未提交,允許臟讀;

read-committed:讀提交,不允許臟讀,但允許不可重復讀;

repeatable-read:可重復讀,不允許臟讀、不可重復讀,但允許幻讀;???

serializable:串行化,以上都不允許。

該參數在 mysql 命令行直接動態修改時使用的參數名稱是tx_isolation='repeatable-read',必須有中杠連接並帶有引號。
該參數在 my.cnf 的[mysqld]標簽下使用的參數名稱是transaction_isolation=repeatable-read,必須有中杠連接,引號可有可無。
該參數也可以使用類似語句 set transaction isolation levelrepeatable read;來間接修改,且不帶中杠也不帶引號,隔離級別關鍵字之間是使用空格隔開。
動態修改隔離級別時,帶 global 關鍵字的語句表示對后來的會話生效,對當前會話不生效,帶 session 關鍵字的語句表示立即對當前會話生效,不帶 global 和 session 關鍵字的表示對當前會話的下一個事務或者說下一個請求生效。注意:使用 begin 或start transaction 語句顯式開啟一個事務之后,不能在活躍的事務內更改隔離級別。這些關鍵字的作用范圍與修改配置參數時效果是一樣的。
全局,會話,動態變量,枚舉類型,默認值為 repeatable-read。
注意:該參數有個比較尷尬的地方,即在 my.cnf 中只能寫作transaction_isolation(這個是 mysqld 的啟動選項,但非server system variables),不能寫成 tx_isolation(這個是server system variables 但非啟動選項),但是在命令行中只能使用 tx_isolation,不能使用 transaction_isolation。

 

0 --> 讀未提交 (READ-UNCOMMITTED)

1 --> 讀已提交 (READ-COMMITTED)

2 --> 可重復讀 (REPEATABLE-READ)

3 --> 序列化 (SERIALIZABLE)

 

設置隔離級別的方法是:

SET [SESSION|GLOBAL] transaction_isolation=[0|1|2|3];

 

查看隔離級別的方法是:

SHOW [GLOBAL] VARIABLES LIKE 'transaction_isolation';


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM