MySQL的事務隔離級別和鎖

2021-07-10 14:47:28 字數 1666 閱讀 3519

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

預設設定隔離級別為下乙個(未開始)事務設定隔離級別

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資料庫事務隔離級別

mysql 鎖 事務隔離級別

最近在看mysql相關的書籍.實驗了一些內容.分享一下,主要是關於事務隔離級別 read committed和repeatable read 和鎖相關的.很多網上文章上都能搜尋到 read committed可以防止髒資料.但是不能防止 不可重複讀.而repeatable read可以防止 不可重複...

Mysql事務隔離級別和鎖機制

一.spring支援四種事務隔離級別 1.isolation read uncommitted 讀未提交 這是事務最低的隔離級別,它充許令外乙個事務可以看到這個事務未提交的資料。2.isolation read committed 讀已提交 保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙...

mysql鎖問題 事務隔離級別

相對其他資料庫而言,mysql的鎖機制比較簡單,其最顯著的特點是不同的儲存引擎支援不同的鎖機制。innodb最大的特點就是一是支援事務 transaction 二是採用了行級鎖。所以我們先來引申一下事務和事務隔離級別的知識。1.1 事務以及acid屬性 事務是由一組sql語句組成的邏輯處理單元,事務...