[筆記] 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


留言
avatar-img
留言分享你的想法!
avatar-img
DDDDD的沙龍
15會員
37內容數
學涯無止境,透過每日or每週模仿學習筆記,不管是哪些領域也好,總有一天也可以從菜雞變小雞
DDDDD的沙龍的其他內容
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/13
待業中後,發現時間變很多就開始東看看西看看,思考著要如何更深入理解Laravel框架的運用,而在Laravel框架中哪些部分是框架替我們做了哪些處理,推薦一個影片給大家一起學習理解。
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/12/05
這邊主要是遇到功能需要處理時區,雖然主管給的筆記已經寫得很完美了,但覺得還是得理解吸收後並記錄自己的筆記後,好像才能有效吸收到腦袋裡
Thumbnail
2023/11/05
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
Thumbnail
2023/11/05
研究這個部分起因是因為公司某些功能服務是使用AWS Serverless來處理計算,故而外訂立了三個月學習NodeJS的計畫,並開始試著實作Serverless服務,Jest測試還沒研究到,下次再補充說明。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
本文介紹了 MyISAM 和 InnoDB 儲存引擎原理的區別和比較,並從讀取效率和寫入效率、結構、任務以及操作等方面探討了兩者的差異。
Thumbnail
本文介紹了 MyISAM 和 InnoDB 儲存引擎原理的區別和比較,並從讀取效率和寫入效率、結構、任務以及操作等方面探討了兩者的差異。
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
種類 SQL指令分三大部分: 資料定義語言(Data Definition Language,DDL):建立資料表、索引和檢視表等,和定義資料表的欄位。 資料操作語言(Data Manipulation Language,DML):資料表紀錄查詢、插入、刪除和更新指令。 資料控制語言(Dat
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
SQL 基本篇 - CRUD、運算子、內建函式
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在Visual Studio裡有內建的SQL幫助我們存資料,SQL指的是資料庫,那麼我們就用註冊會員這個例子來看一下怎麼使用內建的SQL吧~ 最後面有寫非常基本的SQL相關語法可以做參考 Step 1:建立資料庫
Thumbnail
在SQL Server中,暫存表(Temporary Table)是一種在連線會話期間存在的臨時表格,它可以用來暫存中間結果或臨時資料。本文將介紹如何使用T-SQL語法在SQL Server中建立暫存表。
Thumbnail
在SQL Server中,暫存表(Temporary Table)是一種在連線會話期間存在的臨時表格,它可以用來暫存中間結果或臨時資料。本文將介紹如何使用T-SQL語法在SQL Server中建立暫存表。
Thumbnail
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
Thumbnail
參數化查詢是一種將參數值傳遞給SQL語句的技術,這些參數值不會被直接解釋為SQL語法。這樣可以防止惡意用戶通過在輸入中插入惡意的SQL語法來攻擊資料庫。參數化查詢的一個主要優點是它能夠提高安全性,同時也能夠幫助資料庫優化查詢。
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
我們在「【資料庫寶典】什麼是NoSQL?能吃嗎?」有談到一些NoSQL的特性,雖然本質上有所差異,但兩方技術發展的產品也都開始互相支援了,比如說MongoDB後來也發展出類SQL語法讓熟悉SQL的開發者可以降低進入門檻,而SQL、postgresql…等也紛紛納入一些NoSQL的元素,雙方都有開始接
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
Thumbnail
我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News