兩段鎖協議是指每個事務的執行可以分為兩個階段:生長階段(加鎖階段)和衰退階段(解鎖階段)。
加鎖階段:在該階段可以進行加鎖操作。在對任何資料進行讀操作之前要申請並獲得s鎖,在進行寫操作之前要申請並獲得x鎖。加鎖不成功,則事務進入等待狀態,直到加鎖成功才繼續執行。
解鎖階段:當事務釋放了乙個封鎖以後,事務進入解鎖階段,在該階段只能進行解鎖操作不能再進行加鎖操作。
兩段封鎖法可以這樣來實現:事務開始後就處於加鎖階段,一直到執行rollback和commit之前都是加鎖階段。rollback和commit使事務進入解鎖階段,即在rollback和commit模組中dbms釋放所有封鎖。
概念
封鎖序列
兩段鎖協議是指所有事務必須分兩個階段對資料項加鎖和解鎖:
1. 在對任何資料進行讀、寫操作之前,要申請並獲得對該資料的封鎖。
2. 每個事務中,所有的封鎖請求先於所有的解鎖請求。
例如事務t1遵守兩段鎖協議,其封鎖序列是:
lock a, read a, a:=a+100, write a, lock b, unlock a, read b, unlock b, commit;[1]
可以證明,若併發執行的所有事務均遵守兩段鎖協議,則對這些事務的任何併發排程策略都是可序列化的。
另外要注意兩段鎖協議和防止死鎖的一次封鎖法的異同之處。一次封鎖法要求每個事務必須一次將所有要使用的資料全部加鎖,否則就不能繼續執行,因此一次封鎖法遵守兩段鎖協議;但是兩段鎖協議並不要求事務必須一次將所有要使用的資料全部加鎖,因此遵守兩段鎖協議的事務可能發生死鎖。
serializable隔離級別可以一次將所有資料加鎖
mysql資料庫中的 MySQL資料庫中定義
定義資料表 假如某個電腦生產商,它的資料庫中儲存著整機和配件的產品資訊。用來儲存整機產品資訊的表叫做pc 用來儲存配件供貨資訊的表叫做parts。在pc表中有乙個字段,用來描述這款電腦所使用的cpu型號 在parts表中相應有乙個字段,描述的正是cpu的型號,我們可以把它想成是全部cpu的型號列表。...
資料庫 Oracle中建立資料庫
create database lihua 網上的說法是 oracle中的例項只對應乙個資料庫,出現此種情況說明oracle資料庫處於mount 裝載 或open狀態,需要使用startup nomount語句進行狀態更改,或者是直接使用dbca的圖形介面來建立 注 經測試,startup nomo...
資料庫中關係型資料庫的介紹
主要分為關係型資料庫和非關係型資料庫。關係型資料庫是依據關係模型來建立的資料庫,所謂關係模型就是 一對 一 一對多 多對多 等關係模型,關係模型就是指二維 模型,因此乙個關係型資料庫就是由二維表及其之間的聯絡組成的乙個資料組織。常見的關係型資料庫 oracle db2 microsoft sql s...