国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL中鎖的模式與類別有哪些

2024-07-24 12:33:41
字體:
來源:轉載
供稿:網友
  在日常開發工作中,我們幾乎需要天天與數據庫打交道,作為一名只會CRUD的SQL BOY,除了每天用mybatis-generator自動生成DAO層代碼之外,我們幾乎不用去care數據庫中如何處理并發請求,但是突然某一天MYSQL數據庫告警了,出現了死鎖,我們的內心慌的一匹,不禁想問:這不就是個普通查詢嗎,咋還鎖起來了?
 
  讀鎖是某個事務(比如事務A)在進行讀取操作(比如讀一張表或者讀取某一行)時創建出來的鎖,其他的事務可以并發地讀取這些數據(被加了鎖的),但是不能修改這些數據(除非持有鎖的用戶已經釋放鎖)。
 
  事務A對數據加上讀鎖之后,其他事務依然可以對其添加讀鎖(共享),但是不能添加寫鎖。
 
  普通查詢在隔離級別為 serializable 會給記錄加S鎖。但這也取決于場景:非事務讀(auto-commit)在 Serializable 隔離級別下,無需加鎖;
 
  Serializable隔離級別時:如果查詢條件為唯一索引且是唯一等值查詢時:是在該條記錄上加S鎖;非唯一條件查詢(查詢會掃描到多條記錄時):記錄本身+記錄的間隙(需要具體分析間隙的范圍),加S鎖;
 
  select … in share mode,會給記錄加S鎖,但是根據隔離級別的不同,加鎖的行為有所不同:
 
  RC隔離級別:是在記錄上加S鎖。RR/Serializable隔離級別:如果查詢條件為唯一索引且是唯一等值查詢時:是在該條記錄上加S鎖;非唯一條件查詢(查詢會掃描到多條記錄時):記錄本身+記錄的間隙(需要具體分析間隙的范圍),加S鎖;
 
  通常insert操作是不加鎖的,但如果在插入或更新記錄時,檢查到 duplicate key(或者有一個被標記刪除的duplicate key),對于普通的insert/update,會加S鎖,而對于類似replace into或者insert … on duplicate 這樣的SQL語句加的是X鎖。
 
  insert … select 插入數據時,會對 select 的表上掃描到的數據加S鎖;
 
  外鍵檢查:當我們刪除一條父表上的記錄時,需要去檢查是否有引用約束,這時候會掃描子表上對應的記錄,并加上S鎖。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涪陵区| 澎湖县| 措美县| 墨江| 高青县| 蒙自县| 南昌县| 芷江| 西乌珠穆沁旗| 古丈县| 凯里市| 白水县| 河池市| 灵丘县| 荃湾区| 泸西县| 沙坪坝区| 盐城市| 孟州市| 鸡东县| 靖宇县| 南充市| 邮箱| 华安县| 兴化市| 伽师县| 满城县| 岐山县| 镇远县| 中江县| 都江堰市| 敦煌市| 景泰县| 道孚县| 金门县| 连平县| 凌云县| 武强县| 庆安县| 安庆市| 砀山县|