Mysql 鎖 隔離級別

2021-09-27 09:22:37 字數 1074 閱讀 7405

1.共享鎖:只要有乙個人(事務或執行緒)在查詢,其他人就都不能改,要照顧少數

下面是將所有性別是男的資料都加上共享鎖

select * from table where ***='男' lock in share mode
2.排他鎖:只要有乙個人(事務或執行緒)在用(增刪改差),其他人就不能用

下面是將所有性別是男的資料都加上排他鎖

select * from table where ***='男'  for update
3.意向鎖:個人理解說意向鎖,不如說成是個識別符號,如果識別符號存在,就說明該表中的一行或者多行資料正在被其他事務使用,當前事務不能對該錶加鎖,如果識別符號不存在,則說明表中沒有任何一條資料被其他事務使用,既然不存在,那麼其他事物就可以對該錶加鎖了,然後操作該表裡的任意資料

快照讀:單一的select * from 表 where條件

當前讀:讀的是最新的資料,讀之前都需要加鎖,增刪改和上文的加鎖都是當前讀

檢視mysql的預設隔離級別執行如下語句:select @@tx_isolation

1.不可重複讀:read committed保證對讀取到的記錄加鎖 (記錄鎖),存在幻讀現象。

2.可重複讀:repeatable read保證對讀取到的記錄加鎖 (記錄鎖),同時保證對讀取的範圍加鎖,新的滿足查詢條件的記錄不能夠插入 (間隙鎖),不存在幻讀現象。

幻讀

解釋1針對結果集.事務a對結果集查詢,顯示出2條記錄,之後事務b插入相同條件的記錄,然後事務a再次用相同條件查詢,結果顯示出3條記錄,和第一次查詢的資料不一致

解釋2.事務a在插入事先檢測不存在的記錄時,驚奇的發現這些資料已經存在了,(事務a檢測完之後事務b正好插入)之前的檢測讀獲取到的資料如同鬼影一般。

網上支援解釋2的通常都自己覺得解釋1是錯誤的,不過我個人看來兩個解釋還真沒什麼區別。。。

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 可重複讀隔離級別下,如果觸發了當前讀,那也是要保證事務存續期間的資料一致性的,具體怎麼保證呢?答案是加...

mysql 鎖 事務隔離級別

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