国产探花免费观看_亚洲丰满少妇自慰呻吟_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鎖。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 衡水市| 乐清市| 龙口市| 乌兰察布市| 保靖县| 彭州市| 酉阳| 甘德县| 芒康县| 洪雅县| 海兴县| 额敏县| 南和县| 石楼县| 南部县| 深泽县| 保定市| 西贡区| 随州市| 邵东县| 武城县| 响水县| 九江市| 淮南市| 紫云| 临朐县| 满城县| 邵阳市| 汶川县| 巧家县| 郎溪县| 常德市| 东乡县| 施秉县| 游戏| 新丰县| 扶余县| 耒阳市| 广河县| 玉山县| 太仆寺旗|