資料庫 涉及鎖的問題

2021-09-27 07:26:47 字數 1816 閱讀 4179

加鎖

鎖是一種併發控制技術,鎖是用來在多個使用者同時訪問同乙個資料的時候保護資料的。

一、有兩種基本的鎖型別

共享鎖(s):多個事務可封鎖乙個共享頁;任何事務都不能修改該頁;通常是該頁被讀取完畢,s鎖立即被釋放。在執行select語句的時候需要給操作物件(表或者一些記錄)加上共享鎖,但加鎖之前需要檢查是否有排它鎖,如果沒有,則可以加共享鎖(乙個物件上可以加n個共享鎖),否則不行。共享鎖通常在執行完select語句之後釋放,當然也有可能是在事務結束(包括正常結束和異常結束)的時候被釋放,主要取決與資料庫所設定的事務隔離級別。

排它鎖(x):僅允許乙個事務封鎖此頁;其他任何事務必須等到排它鎖被釋放才能對該頁進行訪問;排它鎖一直到事務結束才能被釋放。執行insert、update、delete語句的時候需要給操作的物件加排它鎖,在加排它鎖之前必須確認該物件上沒有其他任何鎖,一旦加上排它鎖之後,就不能再給這個物件加其他任何鎖。排它鎖的釋放通常是在事務結束的時候(當然也有例外,就是在資料庫事務隔離級別被設定成讀未提交的時候,這種情況下排它鎖會在執行完更新操作之後就釋放,而不是在事務結束的時候)。

二、按鎖的粒度

三、按鎖的機制

既然使用了鎖,就有出現死鎖的可能

死鎖詳解

mysql各儲存引擎使用了三種型別(級別)的鎖定機制:行級鎖、表級鎖、頁級鎖

直接鎖定整張表,在你鎖定期間,其他程序無法對該錶進行寫操作。如果你是寫鎖,則其他程序的讀操作也不允許。特點:開銷小,載入快;不會出現死鎖;鎖定粒度最大,發生鎖衝突的概率最高;併發度最低。

myisam儲存引擎採用的就是表級鎖

有2種模式:表共享讀鎖和表獨佔寫鎖。加讀鎖的命令:lock table 表名 read;去掉鎖的命令:unlock tables;

支援併發插入:支援查詢和插入操作併發執行(在表尾併發插入)。

鎖排程機制:寫鎖優先。乙個程序請求某個myisam表的讀鎖,同時另乙個程序也請求同一表的寫鎖,mysql如何處理?答案是寫程序先獲得鎖。

僅對指定的記錄進行加鎖,這樣其他執行緒還是可以對同乙個表中的其他記錄進行操作。特點:開銷大;加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也高。

innodb儲存引擎既支援行級鎖,也支援表級鎖,但預設情況下是採用行級鎖。

一次鎖定相鄰的一組記錄。開鎖和加鎖時間介於表鎖和行鎖之間;會出現死鎖;鎖定粒度介於表鎖和行鎖之間,併發度一般。

最常用的處理多使用者併發訪問的方法是加鎖。當乙個使用者鎖住資料庫中的某個物件時,其他使用者就不能在訪問該物件。加鎖對併發訪問的影響體現在鎖的粒度上。比如,(表鎖)放在乙個表上的鎖限制對整個表的併發訪問;(頁鎖)放在資料頁上的鎖限制了對整個資料頁的訪問;(行鎖)放在行上的鎖限制了對該行的併發訪問。

鎖有兩種機制:樂觀鎖和悲觀鎖

詳情

資料庫鎖問題

為了保證資料的一致性。mysql資料庫存在多種資料引擎,mysql各儲存引擎使用了三種型別 級別 的鎖定機制 表級鎖定,行級鎖定和頁級鎖定。1.表級鎖 表級鎖一次會將整個表鎖定,所可以很好的避免死鎖問題 1 鎖定粒度大,鎖衝突概率高 併發度低 2 好處是不會出現死鎖 開銷小 獲取鎖和釋放鎖的速度很快...

資料庫的鎖問題

事務的併發控制協議 oracle採用類似於多版本兩段鎖的協議 multiversion two phase lock protocol 多版本兩段鎖協議對唯讀事務和更新書屋加以區別,如果是唯讀事務則採用多版本控制協議,如果是更新事務則採用強兩段鎖協議。鎖分共享鎖 shared 和排他鎖 exclus...

MySQL涉及鎖的問題

如何併發的訪問資料庫呢?答案就是加鎖。接下來說一下,資料庫的鎖機制,資料庫中都有哪些鎖?首先呢,鎖是一種併發控制技術,鎖是用來在多個使用者同時訪問同乙個資料的時候保護資料的。有2種基本的鎖型別 共享 s 鎖 多個事務可封鎖乙個共享頁 任何事務都不能修改該頁 通常是該頁被讀取完畢,s鎖立即被釋放。在執...