[筆記] MySQL 有哪些鎖?

閱讀時間約 4 分鐘

最近在準備面試新職缺的關係,開始得將曾經學的內容再回憶回來,有時候做筆記的方式,就是希望在回顧時,這些資源跟知識能夠在最短時間記憶起來。

現在AI工具太多,且框架對於資安支援及處理也越來越方便,反而開始會容易忽略最底層的知識,這邊回顧MySQL的鎖,順便記錄一下找到的一些影片資源(我是屬於看影片記憶法),太多文字說明有時候我就是無法吸收進去。


SQL面試題:MySQL 有哪些鎖?


簡單整理筆記重點

InnoDB是一種用於關聯式數據庫管理系統(RDBMS)中的存儲引擎,最常用於MySQL數據庫系統。

InnoDB使用MVCC機制,允許多個事務(Transaction)同時修改同一個數據表的不同行。這提高了數據庫的並發性,允許多個事務同時進行而不互相干擾。

註:在資料庫管理系統中,一個事務是指一系列的操作,這些操作要麼全部成功執行,要麼全部失敗回滾,以保證數據的一致性和完整性。在一個事務中,如果有任何一個操作失敗,整個事務就會被回滾到開始前的狀態,這種機制稱為ACID(原子性、一致性、隔離性、持久性)。

InnoDB他有兩種鎖,一種是表級鎖,另一種為行級鎖,但通常使用行級鎖,這意味著在事務中只有實際需要的數據行被鎖定,而不是整個數據表,這有助於減少鎖定的衝突,提高性能。

而行級鎖又有兩種,一種叫共享鎖(讀鎖)及排他鎖(寫鎖)。

  • 共享鎖(S): 允許獲得共享鎖的事務讀取該資料行,因共享鎖因為只有讀,所以其他人也可以同時獲取讀鎖,而如果加了共享鎖,則會阻止其他事務去修改這行數據,避免你在讀取資料行的過程中,別人去修改了這行資料。
  • 排他鎖(X): 允許獲得排他鎖的事務更新或刪除資料行,故加上排他鎖,其他事務是不可以獲得該資料行上的共享鎖和排他鎖。


接著是表級鎖,在innoDB表也存在了兩種表級鎖,一種是LOCK TABLES 語句手動指定的鎖(),另一種由InnoDB自動添加的意向鎖(Intention Locks),意向鎖介紹跟範例可參考這裡

而意向鎖也分為共享和排他兩種

  • 意向共享鎖(intention shared lock, IS) : 事務有意對資料中的某些行加共享鎖(S鎖)
  • 意向排他鎖(intention exclusive lock, IX):事務有意對資料中的某些行加排他鎖(X鎖)

在執行以下的語句,簡稱事務A,他會在id=1這行裡面加上行級排他鎖,因為他要修改這筆紀錄,而在修改這行之前,innoDB也會自動添加了表級意向排他鎖。

begin​
select * from t where id = 1 for update​

接著使用LOCK TABLES 去讀它,這裡為事務 B 想要取得 t 表的共享鎖,則會產生不兼容的情況,直到等到事務A完成commit後才會執行。

LOCK TABLES t READ;

而意向排他鎖(IX)與意向排他鎖(IX)之間的操作是兼容的(影片當中有一個表格整理),主要是當你使用了排他鎖(X),這筆 id=1 就不允許別的事務修改,但是意向排他鎖與意向排他鎖因為是兼容,故可以允許兩筆不同紀錄的修改(id=1 and id=2),而這個行為是為了支持行級的併發,根據意向鎖範例文章總結說明:

意向鎖在保證並發性的前提下,實現了行鎖和表鎖共存且滿足事務隔離性的要求。
//事務A​
begin​
select * from t where id = 1 for update​

//事務b
begin​
select * from t where id = 2 for update​


而理解mysql的鎖之後,可以再根據這個影片繼續往下探討,MySQL的行級鎖的實現,覺得影片帶上實際執行範例,很方便理解,推薦大家。

附上PHP面試指南 (朋友傳給我的好貨)。

附上影片連結



其他參考文件連結

MySQL锁:InnoDB行锁需要避免的坑

https://github.com/asdbex1078/MySQL

https://juejin.cn/post/6844903666332368909


15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
留言0
查看全部
發表第一個留言支持創作者!
DDDDD的沙龍 的其他內容
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
最近看到一些網路教學AWS S3可以部署靜態網頁,就想說那不如試試看將local swagger部署上去,之後還可以透過github action 自動部署swagger到s3上,於是花點時間看個影片並搭配chatgpt來實現
在專案開發的時候,專案架構搭建時團隊就會設定 php code style 檢查,避免整個開發團隊大家走出自己的風格,尤其是兩格空白還是四格空白,總是會有不同意見,這時候定義出團隊code style,並透過配置Github Action CI(Continuous Integration)
為了做登入log紀錄,練習mongoDB來存放log資料,這邊就來紀錄 Laravel 配置mongoDB的實作,而原本我的side project是練習搭建docker開發環境,故這邊會以dockerfile來設定跟紀錄踩坑問題。
最近剛好分配一個需求,要批次更新一些基礎設定資料,而新系統基礎設定資料都統一由別的團隊維護在Google Sheet 上,一開始是要我寫 Laravel Seeder 塞資料表,後來發現也太多數據要批次更新了,數據要對到何時何年,乾脆來研究串 Google Sheet API 整批塞入在對總行數就好
在撰寫專案時,有時候可能需要做一些特定Exceptions 來拋出error message的情況,而在不同公司任職,大家配置的流程可能就有些不同,這邊將簡單練習如何配置自定義的Exception。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
从个人发展的角度来讲,我认为每个人都要有一点自己的长处,这个长处并不是人们常说的一些爱好之类的东西,而是个人身上那种相对稀缺的禀赋,或者是几种特质组合起来的独特性能。 这是任何时候都能保持一定竞争力的前提,也是一种不需要卷就能体现出来的个人优势。其实不需要对自己要求很高,只要在自己的领域高于平均,就
Thumbnail
在日常工作、学习、生活中,笔记软件成为重要的生产力工具。然而,如今的笔记软件百花齐放:云文档? 云笔记? 离线笔记? Markdown 编辑器? 块编辑器?双链笔记?在每个类别中,都有几十款比较有名的笔记软件。那么,我们应该如何选择这些适合自己的笔记软件呢? 文本编辑器的特征 文本编辑器的分类
Thumbnail
兩年多前,開始有了重新架構網站的想法,所以把 Blogger 架設的網站,移轉至到了新的平台,當年我也做過了一些優缺點評析,剛好最近又再重新整理網站的所有架構,順便也重新啟動了一次 Hugo 架設網站的循環。
什麼樣的社會運動,才算是成功的社會運動?或者,什麼樣的社會運動,才算有價值與完美的社會運動?這部紀錄片,並未給出一個正確的解答。 但……沒有答案,並不代表就不值得觀看,只因藉由這部紀錄片,我們可以省思在運動之後,這個社會是否得到了什麼?改善了什麼?前進了什麼?還是什麼也沒有,只是一段激情之後換來一股
一直以來,皆認為自己還算是個低物慾的人,直到看了這部紀錄片,才真到見識到何謂低物慾的人與生活。 生活在21世紀的這個時代,「消費」已不再是什麼極為困難、遙不可及的事,相反地,對於現在的我們來說,只要經濟上許可,「消費」早已是易如反掌、稀鬆平常之事,更別說那些以貸款、預支的購買行為。 無需太多思考,當
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
从个人发展的角度来讲,我认为每个人都要有一点自己的长处,这个长处并不是人们常说的一些爱好之类的东西,而是个人身上那种相对稀缺的禀赋,或者是几种特质组合起来的独特性能。 这是任何时候都能保持一定竞争力的前提,也是一种不需要卷就能体现出来的个人优势。其实不需要对自己要求很高,只要在自己的领域高于平均,就
Thumbnail
在日常工作、学习、生活中,笔记软件成为重要的生产力工具。然而,如今的笔记软件百花齐放:云文档? 云笔记? 离线笔记? Markdown 编辑器? 块编辑器?双链笔记?在每个类别中,都有几十款比较有名的笔记软件。那么,我们应该如何选择这些适合自己的笔记软件呢? 文本编辑器的特征 文本编辑器的分类
Thumbnail
兩年多前,開始有了重新架構網站的想法,所以把 Blogger 架設的網站,移轉至到了新的平台,當年我也做過了一些優缺點評析,剛好最近又再重新整理網站的所有架構,順便也重新啟動了一次 Hugo 架設網站的循環。
什麼樣的社會運動,才算是成功的社會運動?或者,什麼樣的社會運動,才算有價值與完美的社會運動?這部紀錄片,並未給出一個正確的解答。 但……沒有答案,並不代表就不值得觀看,只因藉由這部紀錄片,我們可以省思在運動之後,這個社會是否得到了什麼?改善了什麼?前進了什麼?還是什麼也沒有,只是一段激情之後換來一股
一直以來,皆認為自己還算是個低物慾的人,直到看了這部紀錄片,才真到見識到何謂低物慾的人與生活。 生活在21世紀的這個時代,「消費」已不再是什麼極為困難、遙不可及的事,相反地,對於現在的我們來說,只要經濟上許可,「消費」早已是易如反掌、稀鬆平常之事,更別說那些以貸款、預支的購買行為。 無需太多思考,當