MySQL的事務隔離級別和鎖

MySQL的事務隔離級別:Read Uncommitted【讀未提交數據】Read Committed【讀已提交數據】Repeatable Read【可重讀】Serializable【可串行化】

查看MySQL的事務隔離級別:默認、全局和會話事務隔離級別:

SELECT @@tx_isolation
SELECT @@global.tx_isolation; 
SELECT @@session.tx_isolation;

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

設置mysql的事物隔離級別:

語法:

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
默認設置隔離級別爲下一個(未開始)事務設置隔離級別

mysql> set transaction isolation level read committed;
Query OK, 0 rows affected (0.05 sec)
或
mysql> set tx_isolation='read-committed';
Query OK, 0 rows affected (0.00 sec)
注:第一種無效。

需要dba的最高權限,用GLOBAL關鍵字設置隔離級別,在全局對從那點開始創建的所有新連接設置默認事務級別,用SESSION 關鍵字爲將來在當前連接上執行的事務設置默認事務級別。任何客戶端都能自由改變會話隔離級別,也可在事務的中間),或者爲下一個事務設置隔離級別。 

mysql> set session transaction isolation level serializable;
Query OK, 0 rows affected (0.00 sec)
或
mysql> set @@session.tx_isolation='serializable';
Query OK, 0 rows affected (0.00 sec)
注:global類似。

鎖機制:
共享鎖:由讀表操作加上的鎖,加鎖後其他用戶只能獲取該表或行的共享鎖,不能獲取排它鎖,也就是說只能讀不能寫。
排它鎖:由寫表操作加上的鎖,加鎖後其他用戶不能獲取該表或行的任何鎖,典型是mysql事務中。
鎖的範圍:
行鎖: 對某行記錄加上鎖
表鎖: 對整個表加上鎖
組合起來就有:行級共享鎖,表級共享鎖,行級排他鎖,表級排他鎖。
四種隔離級別,開啓事務,默認對錶數據行加上行共享鎖,其他事務對該表將只能進行讀操作,而不能進行寫操作,直到事務結束纔會釋放。
但SERIALIZABLE事務隔離級別最嚴厲,在進行查詢時就會對錶的每個讀取行上加上共享鎖。
詳情學習推薦:MySQL數據庫事務隔離級別

發佈了155 篇原創文章 · 獲贊 872 · 訪問量 136萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章