事務管理基礎:排它鎖和共享鎖相關知識筆記

?

?

1、排它鎖、共享鎖出現的意義

數據庫的并發事務對數據庫進行讀寫,可能會破壞事務的隔離性和數據一致性。為了保持事務的隔離性,系統必須對事務之間的相互作用加以控制。最典型的做法就是當一個事務訪問某個數據對象時,

其他事務都不能更新該數據對象。最常用的控制手段就是加鎖,該方法是只允許事務訪問當前持有鎖的數據項。其中最常用的有排它鎖、共享鎖。

2、排它鎖(Exclusive Locks 簡稱X鎖)

排它鎖也成為寫鎖,主要用于對數據讀寫操作時進行鎖定。如果事務T對數據A加上排它鎖后,就只允許事務T對數據A的讀取、修改,其他事務對數據A不能再加任何鎖,也不能讀取和修改數據A,直到事務T釋放A上的排它鎖。

3、共享鎖(Share Locks 簡稱S鎖)

共享鎖也成為讀鎖,主要用于對數據進行讀取操作時進行鎖定。如果事務T對數據A加上共享鎖后,事務T只能讀取數據A但不可以修改,其他事務可以讀數據A加S鎖來讀取,只要數據A上有共享鎖,任何事務只能對其加共享鎖,而不能加排它鎖來修改。

4、封鎖協議?

4.1 封鎖協議的作用?

因為數據庫加鎖可以限制其他事務對數據的操作,但會降低事務的并發性,這個時候可以采用封鎖協議來保證事務的一致性前提下盡可能提高并發性。封鎖協議是對數據加鎖類型、加鎖時間、釋放鎖時間的一些規則的描述。

常用的封鎖協議:一級封鎖協議、二級封鎖協議、三級封鎖協議。?

  • 一級封鎖協議:主要是指事務T在修改數據A之前必須先對其加上排它鎖,直到事務結束后才能釋放排它鎖。一級封鎖協議使得在一個事務修改數據期間,其他事務不能對該數據進行修改,只能等該事務結束之后,主要解決了丟失修改的問題。?

  • 二級封鎖協議:主要是在一級封鎖協議加上事務T在讀取數據A之前必須對其加上共享鎖,讀取完成后釋放共享鎖。二級封鎖協議使得一個事務不能讀取被其他事務修改中的數據。解決了數據臟讀的問題。但事務T如果讀取數據A之后,其他事務再對A做完修改,事務T再去讀取A,會產生不可重復的錯誤。

  • 三級封鎖協議:主要是在一級封鎖協議加上事務T在讀取數據A之前必須對其加上共享鎖,讀取完成后釋放共享鎖,直到事務結束后才釋放共享鎖。這樣就解決了二級封鎖協議的不可重復讀的問題。

?

?

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

?

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

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

相關文章

php對象底層結構,PHP 底層原理之類和對象

對于PHPer來說,OOP是不可或缺的開發思維,但是你對php類和對象的底層實現又了解多少呢?本著知其然且知其所以然的思想,讓我們一起來尋找答案~類的底層實現可看作是之前我們講過的變量、函數等的知識集合。所以想要理解更深入的同學…

程序默認在副屏顯示_聊一款性價比極高的電競顯示器

小米在6月17日開啟了小米顯示器27寸165Hz版本的眾籌,這臺顯示器的分辨率為2560x1440,也就是大家熟悉的小金剛,它與大金剛的最大區別也只是省去了G-Sync功能,而其他方面的參數幾乎是一致的。那么我們今天就來聊聊這款真香的顯示器。…

CocoaPods安裝和使用教程

CocoaPods是什么? 當你開發iOS應用時,會經常使用到很多第三方開源類庫,比如JSONKit,AFNetWorking等等。可能某個類庫又用到其他類庫,所以要使用它,必須得另外下載其他類庫,而其他類庫又用到其他…

事務管理基礎:兩段鎖協議、活鎖、死鎖相關知識整理

1、兩段鎖協議(Two-phase Locking Protocol) 兩段鎖協議是指對任何數據進行讀寫之前必須對數據進行加鎖;在釋放一個封鎖之后,事務不再申請和獲得任何其他封鎖。兩段鎖協議中兩段的含義:事務分為兩個階段,第…

php 空函數,PHP 中函數 isset(), empty(), is_null() 的區別

PHP 中函數 isset(), empty(), is_null() 的區別,使用 PHP 進行開發的時候,經常會用到 isset(), empty(), is_null() 這幾個函數對數據進行判斷,但是這是哪個函數的具體區別其實沒有很好的掌握。下面我們詳細講解一下:NULL什么是 NULL&#x…

UVa11021

11021 TribblesGRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the quantity of matter they contain – the quantity ofmatter they contain being ascertained by the strength of their tendencyto approach one anot…

python合法變量類型_Python 變量類型

變量存儲在內存中的值。這就意味著在創建變量時會在內存中開辟一個空間。基于變量的數據類型,解釋器會分配指定內存,并決定什么數據可以被存儲在內存中。因此,變量可以指定不同的數據類型,這些變量可以存儲整數,小數或…

數據庫系統故障相關知識筆記

數據庫系統中可能發生的故障主要包括事務故障、系統故障、介質故障、計算機病毒等。下面給大家簡單整理一下相關的故障知識筆記。1、事務故障事務故障是因為程序執行錯誤而引起的非預期、異常終止的故障。主要有邏輯錯誤、系統錯誤導致事務的執行失敗。邏輯錯誤:比如…

dede php分頁代碼,DEDECMS系統分頁標簽自定義二次開發

以前有給大家寫過一篇自定義dedecms留言板的分頁,下面我再來給大家分享一篇自定義常見的分頁標簽例子,希望文章對大家會有所幫助.自定搜索結果頁面文章分頁,在/plus文件夾中新建一個search.php文件,代碼如下:require_once(dirname(__FILE__)."/../include/common.inc.php&…

windows下gvim中文亂碼解決方案

網羅了一些網上的解決windows下gvim中文亂碼的解決方案,都試了一遍,可惜都不能完全解決我的所有問題,最后我綜合一下網上的兩種方案,得到了最后完全解決我的中文亂碼問題的方案,配置很簡單,就是把下面的配置…

python主從_python—mariadb自動部署主從

import configparserimport osdef config_mariadb_yum():exists os.path.exists(/etc/yum.repos.d/mariadb.repo)if exists:print(mariadb.repo文件已經存在)yum_install_mariadb()else:config configparser.ConfigParser()config.read(/etc/yum.repos.d/mariadb.repo, encod…

數據庫系備份相關知識筆記

1、數據庫備份的知識介紹在互聯網時代,最珍貴的財產不是計算機應用軟件,更不是計算機硬件,而是企業在業務長期發展過程中積累下來的業務數據。建立網絡最根本的用途是更加方便的傳遞、使用數據,人為原因、硬盤損壞、計算機病毒、斷…

python數組合并、輸入三行數據,如何在python中合并兩個或三個3D數組?

Numpy的hstack、vstack或dstack(取決于要連接數組的軸)將連接多維數組。在請注意,對于MODIS氣溶膠數據,使用hstack連接陣列有時會拋出錯誤,因為有時陣列是203 x 135,有時是204 x 135,因此水平維度并不總是匹配的基于您…

操作系統:分享6 個“嚇人”的 Linux 命令

目錄 1、crypt 2、kill 3、shred 5、at midnight 6、daemons 1、crypt 好吧,我們一直都有crypt。顧名思義,crypt不是存放垃圾文件的地宮或墓坑,而是加密文件內容的命令。 如今,“crypt”通常作為一個腳本而實現:通過調…

谷歌網絡代理工具_谷歌更新了Dialogflow AI引擎,幫助客戶創建更好的虛擬代理...

日前,谷歌發布了對其Dialogflow的一些重要更新,對話流是其呼叫中心人工智能服務的主要技術,它可以自動與呼叫中心的客戶進行交互。據悉,Dialogflow是一個會話人工智能引擎,用于創建虛擬代理,可以理解和響應…

php use閉包參數,php 閉包use的使用

閉包可以從父作用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。PHP的閉包即為匿名函數。示例如下。$message hello;// 繼承 $message$example function () use ($message) {var_dump($message);};echo $example(); //hello// Inherited variables value is fr…

數據庫恢復相關知識筆記

1、數據庫恢復的原理數據庫恢復的原理主要是在數據庫發生故障之后,建立冗余數據,在故障發生之后利用冗余數據來完成數據庫恢復。數據轉儲和建立日志文件是建立冗余數據常用的技術手段。一般情況下兩種技術手段會同時使用。2、故障恢復的兩個操作故障恢復…

C++ map注意事項

C map注意事項 1、在map中,由key查找value時,首先要判斷map中是否包含key。 2、如果不檢查,直接返回map[key],可能會出現意想不到的行為。如果map包含key,沒有問題,如果map不包含key,使用下標有…