Go語言八股文之Mysql鎖詳解

???💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。



非常期待和您一起在這個小小的網絡世界里共同探索、學習和成長。💝💝💝 ?? 歡迎訂閱本專欄 ??
?

前言

小鄭最近在準備Go語言的面試題,通過github和b站等各種學習網站上學習go語言的八股文,并且整理出自己覺得面試可能會問到的知識點,希望通過做筆記的方式來鞏固自己的知識點,并且也希望可以幫助到大家在面試的時候更加得心應手一些,那么從現在開始,和我一起加入八股學習之旅吧!

1.為什么要加鎖?

當多個用戶并發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對并發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。 保證多用戶環境下保證數據庫完整性和一致性。

2.按照鎖的粒度分數據庫鎖有哪些?

在關系型數據庫中,可以按照鎖的粒度把數據庫鎖分為行級鎖(INNODB引擎)、表級鎖(MYISAM引擎 )和頁級鎖(BDB引擎 )。 行級鎖

  • 行級鎖是MySQL中鎖定粒度最細的一種鎖,表示只針對當前操作的行進行加鎖。行級鎖能大大減少數據庫操作的沖突。其加鎖粒度最小,但加鎖的開銷也最大。行級鎖分為共享鎖 和 排他鎖。
  • 開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖沖突的概率最低,并發度也最高。

表級鎖

  • 表級鎖是MySQL中鎖定粒度最大的一種鎖,表示對當前操作的整張表加鎖,它實現簡單,資源消耗較少,被大部分MySQL引擎支持。最常使用的MYISAM與INNODB都支持表級鎖定。表級鎖定分為表共享讀鎖(共享鎖)與表獨占寫鎖(排他鎖)。
  • 開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發出鎖沖突的概率最高,并發度最低。

頁級鎖

  • 頁級鎖是MySQL中鎖定粒度介于行級鎖和表級鎖中間的一種鎖。表級鎖速度快,但沖突多,行級沖突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。BDB支持頁級鎖
  • 開銷和加鎖時間界于表鎖和行鎖之間;會出現死鎖;鎖定粒度界于表鎖和行鎖之間,并發度一般

MyISAM和InnoDB存儲引擎使用的鎖:

  • MyISAM采用表級鎖(table-level locking)。
  • InnoDB支持行級鎖(row-level locking)和表級鎖,默認為行級鎖

3.從鎖的類別上分MySQL都有哪些鎖呢?

從鎖的類別上來講,有共享鎖和排他鎖。

  • 共享鎖: 又叫做讀鎖。 當用戶要進行數據的讀取時,對數據加上共享鎖。共享鎖可以同時加上多個。
  • 排他鎖: 又叫做寫鎖。 當用戶要進行數據的寫入時,對數據加上排他鎖。排他鎖只可以加一個,他和其他的排他鎖,共享鎖都相斥。

用上面的例子來說就是用戶的行為有兩種,一種是來看房,多個用戶一起看房是可以接受的。 一種是真正的入住一晚,在這期間,無論是想入住的還是想看房的都不可以。 鎖的粒度取決于具體的存儲引擎,InnoDB實現了行級鎖,頁級鎖,表級鎖。 他們的加鎖開銷從大到小,并發能力也是從大到小。

4.數據庫的樂觀鎖和悲觀鎖是什么?怎么實現的?

  • 悲觀鎖:假定會發生并發沖突,屏蔽一切可能違反數據完整性的操作。在查詢完數據的時候就把事務鎖起來,直到提交事務。實現方式:使用數據庫中的鎖機制? (多寫)
  • 樂觀鎖:假設不會發生并發沖突,只在提交操作時檢查是否違反數據完整性。在修改數據的時候把事務鎖起來,通過version的方式來進行鎖定。實現方式:樂一般會使用版本號機制或CAS算法實現。 (多讀場景)

版本號(version)方式是一種實現樂觀鎖的常見方法,通常用于并發控制。其基本原理是給每條數據記錄增加一個版本號,每次數據更新時,版本號都會遞增。在更新操作時,系統會先檢查該數據的版本號是否與當前操作時數據庫中存儲的版本號一致,如果一致則允許更新,否則說明數據已經被其他事務修改過,更新操作會被拒絕,事務需要重新執行。

5.InnoDB引擎的行鎖是怎么實現的?

InnoDB是通過索引來實現行鎖的,如果查詢條件列是表的索引列,那么innoDB會根據索引定位到特點的行,并且對這些行進行加鎖,確保事務完成之前其他事務沒辦法修改這些行。

如果是非索引列,那么innoDB就會對表進行全表掃描,這個過程會導致表鎖,所以也意味著沒辦法并發執行操作。

6.什么是死鎖?怎么解決?

死鎖是指兩個或多個事務在同一資源上相互占用,并請求鎖定對方的資源,從而導致惡性循環的現象。 常見的解決死鎖的方法 1、如果不同程序會并發存取多個表,盡量約定以相同的順序訪問表,可以大大降低死鎖機會。?2、在同一個事務中,盡可能做到一次鎖定所需要的所有資源,減少死鎖產生概率; 3、對于非常容易產生死鎖的業務部分,可以嘗試使用升級鎖定顆粒度,通過表級鎖定來減少死鎖產生的概率; 如果業務處理不好可以用分布式事務鎖或者使用樂觀鎖

7.隔離級別與鎖的關系

1.在Read Uncommitted級別下,讀取數據不需要加共享鎖,這樣就不會跟被修改的數據上的排他鎖沖突

2.在Read Committed級別下,讀操作需要加共享鎖,但是在語句執行完以后釋放共享鎖;

與鎖的關系:在事務執行過程中,對讀取的數據行會加共享鎖,確保其他事務無法修改正在讀取的數據,直到讀取完成。

3.在Repeatable Read級別下,讀操作需要加共享鎖,但是在事務提交之前并不釋放共享鎖,也就是必須等待事務執行完畢以后才釋放共享鎖。

與鎖的關系:在事務開始時,讀取的數據會被鎖住(共享鎖),在整個事務生命周期中,不會釋放這些鎖,從而保證數據的一致性。其他事務無法修改或插入相同范圍的數據,直到當前事務完成。

4.SERIALIZABLE 是限制性最強的隔離級別,因為該級別鎖定整個范圍的鍵,并一直持有鎖,直到事務完成。

與鎖的關系:該級別會鎖定整個數據范圍(包括正在讀取的所有數據行),直到事務結束,因此會阻止其他事務修改、刪除或插入范圍內的任何數據。

隔離級別鎖類型鎖的持續時間可能出現的并發問題
Read Uncommitted無鎖無鎖臟讀、不可重復讀、幻讀
Read Committed共享鎖(讀取時加)讀取完后釋放不可重復讀、幻讀
Repeatable Read共享鎖(讀取時加)持續到事務結束幻讀
Serializable范圍鎖(鎖住數據范圍)直到事務完成無臟讀、不可重復讀、幻讀

??????小鄭是普通學生水平,如有紕漏,歡迎各位大佬評論批評指正!😄😄😄

💘💘💘如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!👍 👍 👍

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905721.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實戰案例:采集 51job 企業招聘信息

本文將帶你從零開始,借助 Feapder 快速搭建一個企業級招聘信息數據管道。在“基礎概念”部分,我們先了解什么是數據管道和 Feapder;“生動比喻”用日常場景幫助你快速理解爬蟲組件;“技術場景”介紹本項目中如何使用代理等采集策略…

GMT之Bash語言使用

GMT的操作有自己的邏輯和“命令”,但GMT是可以用Bash語言控制的,所以常常以.sh為后綴寫GMT程序。 GMT程序運行步驟如下: 采用cd ,定位到指定文件夾;以sh ***.sh運行GMT,得到結果。 另外,遇到…

整合Redis

整合Redis 引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.apache.commons</groupId><art…

Vue3——Watch偵聽器

目錄 手動指定監聽對象 偵聽ref對象 偵聽ref對象中的某個屬性 reactive寫法 watchEffect 自動偵聽 多源偵聽 一次性偵聽器 watch 是?個?于觀察和響應Vue響應式系統中數據變化的?法。它允許你指定?個數據源&#xff08;可以是 響應式引?、計算屬性、組件的屬性等&#xf…

1、數據結構與算法(Python版-啃書)-緒論

1.1 計算機問題求解 一般而言&#xff0c;人們需要的不是解決一個具體問題的程序&#xff0c;而是解決一類問題的程序。 對于求平方根這樣的簡單問題&#xff0c;人們希望的也不是專用于求某個數(例如2)的平方根的函數&#xff0c;而是能求任何數的平方根的函數。 用計算機解…

微信小程序之將輪播圖設計為組件

在components文件夾上點右鍵&#xff0c;新建component&#xff0c;命名為swiper 然后將我們之前的代碼都拷貝到對應文件中&#xff0c; 然后我們的頁面要引用這個組件&#xff0c; 在pages\index\index.json中引入&#xff1a; { "usingComponents": {"van…

【視頻】解決FFmpeg將RTSP轉RTMP流時,出現的卡死、出錯等問題

【視頻】郭老二博文之:圖像視頻匯總 1、簡述 如果不修改圖像內容,可以使用FFmpeg命令來將RTSP轉RTMP流。 SRS視頻服務器就是這么干的,它沒有使用FFmpeg接口,而是直接使用FFmpeg命令來轉流。 但是在使用中,約到了一些問題,比如轉流時卡死、轉流出錯等等,下面描述怎么解…

報銷單業務筆記

文章目錄 業務點業務點-對公對私業務點-多系統標志 特殊業務入參入參報文 出參出參報文中間的邏輯多對多關系 其他應該是整體成功還是可以部分成功這種多對多關多關系有沒有優雅的判斷方式 報銷單是個通用場景&#xff0c;有通用邏輯&#xff0c;在此基礎上進行適度定制&#x…

25軟考【軟件評測師】:10天極限沖刺攻略(附知識點解析+沖刺攻略)

距離2025上半年“軟件評測師”考試已經只剩最后一周多了&#xff0c;還沒有準備好的小伙伴趕緊行動起來。為了幫助大家更好的沖刺學習&#xff0c;特此提供一份考前沖刺攻略。本指南包括考情分析、沖刺攻略兩個部分&#xff0c;可以參考此指南進行最后的復習要領&#xff0c;相…

python 的 ?uv、pip? 和 ?conda? 對比和技術選型

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

Python logging模塊使用指南

Python 的 logging 模塊是一個靈活且強大的日志記錄工具&#xff0c;廣泛應用于應用程序的調試、運行監控和問題排查。它提供了豐富的功能&#xff0c;包括多級日志記錄、多種輸出方式、靈活的格式配置等。以下是詳細介紹&#xff1a; 一、為什么使用 logging 模塊&#xff1f;…

開發技術.前端開發相關問題

第一部分 響應式布局 1. 幾個布局單位概念 PX: px像素&#xff08;Pixel&#xff09; 相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。 PX特點 1. IE無法調整那些使用px作為單位的字體大小&#xff1b; 2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體…

1. Go 語言環境安裝

&#x1f451; 博主簡介&#xff1a;高級開發工程師 &#x1f463; 出沒地點&#xff1a;北京 &#x1f48a; 人生目標&#xff1a;自由 ——————————————————————————————————————————— 版權聲明&#xff1a;本文為原創文章&#xf…

WPF自定義控件開發全指南:多內容切換與動畫集成

WPF自定義控件開發全指南&#xff1a;多內容切換與動畫集成 一、控件基礎架構設計1.1 選擇控件基類1.2 定義關鍵屬性 二、動畫系統集成2.1 淡入淡出動畫實現2.2 滑動動畫實現 三、視覺狀態管理四、完整使用示例4.1 XAML聲明4.2 動畫觸發邏輯 五、擴展與優化5.1 性能優化建議5.2…

數據結構 -- 順序查找和折半查找

查找的基本概念 基本概念 查找&#xff1a;在數據集合中尋找滿足某種條件的數據元素的過程 查找表&#xff08;查找結構&#xff09;&#xff1a;用于查找的數據集合稱為查找表&#xff0c;它由同一類型的數據結構元素&#xff08;或記錄&#xff09;組成 關鍵字&#xff1…

汽車功能安全--TC3xx MBIST設計要點

英飛凌針對硬件故障的自測&#xff0c;提供了四種機制&#xff1a;PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我們已經聊過了&#xff0c;今天就快速介紹下MBIST。 MBIST&#xff0c;全程Memory Built-in Self Test&#xff0c;用于檢測SRAM數據單元的完整性。 在26262…

openpi 入門教程

系列文章目錄 目錄 系列文章目錄 前言 一、運行要求 二、安裝 三、模型檢查點 3.1 基礎模型 3.2 微調模型 四、運行預訓練模型的推理 五、在自己的數據上微調基礎模型 5.1. 將數據轉換為 LeRobot 數據集 5.3. 啟動策略服務器并運行推理 5.4 更多示例 六、故障排除…

java加強 -Collection集合

集合是一種容器&#xff0c;類似于數組&#xff0c;但集合的大小可變&#xff0c;開發中也非常常用。Collection代表單列集合&#xff0c;每個元素&#xff08;數據&#xff09;只包含1個值。Collection集合分為兩類&#xff0c;List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor

WPS一旦打開,就會修改默認打開方式,怎么解?

目錄 前言 解決方法 結語 前言 電腦上同時存在WPS和微軟的Office全家桶&#xff0c;但是我更喜歡用Office全家桶。前幾天剛在設置改過來&#xff0c;忘記更改pdf文件打開默認應用。結果沒過幾天&#xff0c;不小心用WPS打開pdf文件時候&#xff0c;給我把默認設置全改回去了…