mysql中隔離級別和鎖有什麼關係?

2021-08-28 09:55:09 字數 1672 閱讀 9656

事務隔離級別,我將它理解為多執行緒資料隔離級別。大家可以想象乙個物件有對其中某個欄位的增刪改查方法,在多執行緒的情況下就有很多種解決方案。

第一種:讀寫都是直接操作該欄位,不加同步鎖。

第二種:讀是操作該字段的副本,寫是直接操作該欄位,不加同步鎖。

第三種:讀和寫都是操作該字段的副本,不加同步鎖。

第四種:讀寫直接操作該欄位,加同步鎖。

ps:如果有副本,增刪改查都是操作副本

通用方法:commit,將副本資料同步至該字段。

通用方法:rollback,將此事務所有操作了該字段的方法回滾。

於是這類方法,便為分為了四類,分別為讀未提交,讀已提交,可重複讀,序列(中文理解,非要用英文,我手機也打不出來)

那麼現在開始簡單介紹四類隔離級別。

1:讀未提交,首先我們開啟兩個事務,分別為事務a和b,在事務a中更新刪除或修改一條資料後,在未commit的情況下,在事務b中可以直接查出來。也就是說事務b是讀取的資料而非副本,事務a是操作的資料而非副本。而rollback是將資料還原為事務a在開啟時的資料。

2:讀已提交,我們同樣用a和b,在事務a中更新刪除或修改一條資料後,在未commit的情況下,在事務b中查詢不到,在commit的情況下,在事務b中可以查詢到。也就是說事務b仍然是讀取的資料而非副本,事務a操作的是副本,commit的方法是將副本同步至資料。而rollback是將副本還原至事務a在開啟時的副本資料。

3:可重複讀,還是a和b,在事務a中更新刪除或修改一條資料後,在commit的情況下,在事務b中仍然查詢不到。也就是說事務b讀取的是資料的副本,當然事務a操作的也是副本。這點可以開事務c來驗證,將事務c的隔離級別調整為讀未提交即可。(大夥可自行驗證)

4:序列,所有事務操作序列,也就是事務a沒結束的時候,事務b開始也是等待,無法操作。

以上重新碼完,以下有時間再碼,先去忙了。

鎖機制為什麼有鎖,事務或者不使用事務,在運算元據實體的時候資料庫會對資料進行加鎖,不加鎖引發的問題不需要解釋吧?熟悉多執行緒的都知道。這就像你用hashmap拿去玩多執行緒。鎖和事務的區別就如同乙個是字段的同步鎖,乙個是如何使用該字段或其副本,二者幾乎沒有關係。

資料庫自帶的鎖分兩類

1.共享鎖

2.排他鎖

增刪改預設使用排他鎖。

查不使用任何鎖,可以在sql最後面新增for update指定使用排他鎖,共享鎖的語句背不下來,就不寫了,網上一大把。

對於同一條資料,只能被加鎖一至多個共享鎖或乙個排他鎖。如果資料被共享鎖加持,查詢預設因未使用鎖,可以直接查詢。增刪改因使用排他鎖需要等待共享鎖釋放才能執行,否則等待。排他鎖類似。請反覆研讀此段第一句話和理解各sql預設的鎖。

以上均為業內所謂的悲觀鎖

其他知識:

樂觀鎖,人為在資料裡面加乙個字段作為版本標誌,操作前讀資料,操作的時候直接以where作為條件,如果更新數量不符合實際數量,則迴圈讀取更新。(個人覺得此解決方案不能叫鎖)。

如果資料庫支援行鎖,那麼被加悲觀鎖時,只會鎖幾行,其他資料的增刪改查不受影響。不支援行鎖的資料庫就直接是表鎖了,也就是該錶只能這個sql執行完,另乙個才能操作。所以實際情況就算用悲觀的排他鎖,也並不會多影響效能,加上有redis做查的快取,其實是能吊打樂觀鎖的,至少我是這麼認為的,畢竟資料庫的連線的代價是很大的。樂觀的迴圈查與更新可能對資料庫造成毀滅性的打擊。

另外事務的隔離級別會影響鎖的時長,這個在下目前只聽說可重複讀及序列的共享鎖會延遲到事務結束。但是實測並不會影響。

Mysql 鎖 隔離級別

1.共享鎖 只要有乙個人 事務或執行緒 在查詢,其他人就都不能改,要照顧少數 下面是將所有性別是男的資料都加上共享鎖 select from table where 男 lock in share mode2.排他鎖 只要有乙個人 事務或執行緒 在用 增刪改差 其他人就不能用 下面是將所有性別是男的...

mysql 鎖,隔離級別

1.鎖是對多執行緒,多程序訪問同一資源進行協調的機制 2.分為行鎖,表鎖,頁鎖。myisam和memory支援表鎖,bdb引擎支援表鎖,頁鎖。innodb支援表鎖,行鎖 預設 3.myisam表鎖 4.myisam併發插入 5.讀寫操作同時爭搶鎖,寫鎖優先,可以設定寫鎖優先順序降低,low prio...

MySQL 鎖與隔離級別

五 gap鎖 1 六 next key lock 七 如何選擇隔離級別 ref快照讀的幻讀通過 mvcc 解決 當前讀的幻讀通過 next key鎖 解決 讀提交隔離級別一般沒有 gap lock 可重複讀隔離級別下,如果觸發了當前讀,那也是要保證事務存續期間的資料一致性的,具體怎麼保證呢?答案是加...