悲觀鎖和樂觀鎖實現 以及 組合 索引描述

2021-08-18 19:46:55 字數 1798 閱讀 9559

資料庫設定級別

set session transaction isolation level repeatable read

或者 select @@tx_isolation;

悲觀鎖:

在關聯式資料庫管理系統裡,悲觀併發控制(又名「悲觀鎖」,pessimistic concurrency control,縮寫「pcc」)是一種併發控制的方法。它可以阻止乙個事務以影響其他使用者的方式來修改資料。如果乙個事務執行的操作都某行資料應用了鎖,那只有當這個事務把鎖釋放,其他事務才能夠執行與該鎖衝突的操作。

悲觀併發控制主要用於資料爭用激烈的環境,以及發生併發衝突時使用鎖保護資料的成本要低於回滾事務的成本的環境中。

begin;/begin

work;/start

transaction; (三者選一就可以)

//1.查詢出商品資訊

select status from t_goods where id=1

forupdate;

//2.根據商品資訊生成訂單

insert

into t_orders (id,goods_id) values (null,1);

//3.修改商品status為2

update t_goods set status=2;

//4.提交事務

commit;/commit

work;

樂觀鎖:

在關聯式資料庫管理系統裡,樂觀併發控制(又名「樂觀鎖」,optimistic concurrency control,縮寫「occ」)是一種併發控制的方法。它假設多使用者併發的事務在處理時不會彼此互相影響,各事務能夠在不產生鎖的情況下處理各自影響的那部分資料。在提交資料更新之前,每個事務會先檢查在該事務讀取資料後,有沒有其他事務又修改了該資料。如果其他事務有更新的話,正在提交的事務會進行回滾。樂觀事務控制最早是由孔祥重(h.t.kung)教授提出。

select

count

from product where productid = 2;

update product set

count = 45

where productid =2

andcount = 46;

資料的鎖級別,資料庫的行級鎖是依賴索引的

索引的建立

create index indexname on user(id);

或者 alert table tablename add index indexname(coluname);

面試的時候常會被問到,諸如,為什麼行級鎖依賴於索引。

可以這樣回答,行級鎖不利於對資料庫的訪問,增大了時間開銷,索引是對某一列的資料排序,方便以後的訪問,節省了時間的開銷。所以行級鎖依賴於索引有利於效能的提公升(當然這個是要看資料量的),然後面試官可能會問到,索引是如何排序的?

那麼這就要說到b+樹了,說到b+樹,又得說b-樹了,說說二者的區別,以及其關鍵字儲存位置和穩定性,巴拉巴拉……,暫時省略

組合索引的建立

create index indexname on user(id,username);

或者 alert tabel tablename add index indexname(id(3),username);

關於組合索引的解釋:

組合索引的建立會增大系統儲存開銷,但是會提高查詢的速度,b+樹查詢,減小了磁碟io次數。

悲觀鎖和樂觀鎖

1.悲觀鎖,正如其名,它指的是對資料被外界 包括本系統當前的其他事務,以及來自外部系統的事務處理 修改持保守態度,因此,在整個資料處理過程中,將資料處於鎖定狀態。悲觀鎖的實現,往往依靠資料庫提供的鎖機制 也只有資料庫層提供的鎖機制才能真正保證資料訪問的排他性,否則,即使在本系統中實現了加鎖機制,也無...

悲觀鎖和樂觀鎖

前幾天有人問了我乙個問題,說如果資料庫某些操作不用事務,那麼又需要保持資料的一致性,那麼該用什麼方法替代事務。我就想到了悲觀鎖和樂觀鎖的思想,下面我解釋一下在資料庫中的悲觀鎖和樂觀鎖 1.悲觀鎖就是把資料庫的一些操作,放在事務當中,依賴資料庫的隔離級別,實現對資料修改的封鎖,這樣做資料一致性可以保持...

悲觀鎖和樂觀鎖

悲觀鎖 pessimistic lock 顧名思義,就是很悲觀,每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會block直到它拿到鎖。傳統的關係型資料庫裡邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。樂觀鎖 optim...