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

首頁 > 數據庫 > MySQL > 正文

mysql中的鎖機制深入講解

2024-07-24 12:49:39
字體:
來源:轉載
供稿:網友

前言

為了保證數據的一致完整性,任何一個數據庫都存在鎖定機制。鎖定機制的優劣直接應想到一個數據庫系統的并發處理能力和性能,所以鎖定機制的實現也就成為了各種數據庫的核心技術之一。

大概幾個月之前項目中用到事務,需要保證數據的強一致性,期間也用到了mysql的鎖,但當時對mysql的鎖機制只是管中窺豹,所以本文打算總結一下mysql的鎖機制。

本文主要論述關于mysql鎖機制,mysql版本為5.7,引擎為innodb,由于實際中關于innodb鎖相關的知識及加鎖方式很多,所以沒有那么多精力羅列所有場景下的加鎖過程并加以分析,僅根據現在了解的知識,結合官方文檔,說說自己的理解,如果發現有不對的地方,歡迎指正。

概述

總的來說,InnoDB共有七種類型的鎖:

共享/排它鎖(Shared and Exclusive Locks) 意向鎖(Intention Locks) 記錄鎖(Record Locks) 間隙鎖(Gap Locks) 臨鍵鎖(Next-key Locks) 插入意向鎖(Insert Intention Locks) 自增鎖(Auto-inc Locks)

mysql鎖詳解

1. 共享/排它鎖(Shared and Exclusive Locks)

共享鎖(Share Locks,記為S鎖),讀取數據時加S鎖 排他鎖(eXclusive Locks,記為X鎖),修改數據時加X鎖

使用的語義為:

共享鎖之間不互斥,簡記為:讀讀可以并行 排他鎖與任何鎖互斥,簡記為:寫讀,寫寫不可以并行

可以看到,一旦寫數據的任務沒有完成,數據是不能被其他任務讀取的,這對并發度有較大的影響。對應到數據庫,可以理解為,寫事務沒有提交,讀相關數據的select也會被阻塞,這里的select是指加了鎖的,普通的select仍然可以讀到數據(快照讀)。

2. 意向鎖(Intention Locks)

InnoDB為了支持多粒度鎖機制(multiple granularity locking),即允許行級鎖與表級鎖共存,而引入了意向鎖(intention locks)。意向鎖是指,未來的某個時刻,事務可能要加共享/排它鎖了,先提前聲明一個意向。

1、意向鎖是一個表級別的鎖(table-level locking);

2、意向鎖又分為:

意向共享鎖(intention shared lock, IS),它預示著,事務有意向對表中的某些行加共享S鎖; 意向排它鎖(intention exclusive lock, IX),它預示著,事務有意向對表中的某些行加排它X鎖;

加鎖的語法為:

select ... lock in share mode;  要設置IS鎖;select ... for update;       要設置IX鎖;

事務要獲得某些行的S/X鎖,必須先獲得表對應的IS/IX鎖,意向鎖僅僅表明意向,意向鎖之間相互兼容,兼容互斥表如下:


<td id="4bj4t"></td>
<p id="4bj4t"></p>
  IS IX
IS 兼 容 兼 容
IX
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 崇文区| 鄂尔多斯市| 道孚县| 红河县| 兴隆县| 罗城| 玛沁县| 科尔| 建瓯市| 渝中区| 南川市| 县级市| 大厂| 连南| 河西区| 望谟县| 汕尾市| 体育| 雅安市| 菏泽市| 河北省| 青海省| 阳城县| 新丰县| 绥棱县| 蒙阴县| 永德县| 通化县| 吉首市| 文山县| 吉安市| 全南县| 平邑县| 深圳市| 罗定市| 襄城县| 南投市| 石楼县| 潍坊市| 微山县| 晋中市|
  • <p id="4bj4t"></p>
  • <td id="4bj4t"><tr id="4bj4t"></tr></td>