資料庫原理 SQL補

2021-09-02 09:45:15 字數 1616 閱讀 5578

併發操作帶來的資料不一致性

(1)丟失修改

丟失修改是指事務1與事務2從資料庫中讀入同一資料並修改,事務2的提交結果破壞了事務1提交的結果,導致事

務1的修改被丟失。

(2)不可重複讀

不可重複讀是指事務1讀取資料後,事務2執行更新操作,使事務1無法再現前一次讀取結果

三類不可重複讀:

a)事務2對其做了修改,當事務1再次讀該資料時,得到與前一次不同的值;

b)事務2刪除了其中部分記錄,當事務1再次讀取資料時,發現某些記錄神奇的消失了

c)事務2插入了一些記錄,當事務1再次按相同條件讀取資料時,發現多了一些記錄。

後兩種不可重複讀有事也被稱為幻影(phantom row)

(3)讀「髒」資料

事務1修改某一資料,並將其協會磁碟,事務2讀取同一資料後,事務1由於某種原因被撤回。這時事務1已經修改

過的資料恢復原值,事務2讀到的資料就與資料庫不一致,是不正確的資料,又被稱為「髒讀」

產生上述不一致性的原因:

併發操作破壞了事務的隔離性,引發了資料的不一致性

解決辦法:

採用封鎖機制

基本封鎖型別

dbms通常提供了多種型別的封鎖。乙個事務對某個資料物件加鎖後究竟擁有什麼樣的控制石油封鎖的型別決定的。

排它鎖(簡記為x鎖)

若事務t對資料物件a加上x鎖,則只允許t讀取和修改a,其他任何事務都不能對a加任何型別的鎖,直到t釋放a上的鎖。

共享鎖(簡記為s鎖)

若事務t對資料物件a加上s鎖,則其它事務只能再對a加s鎖,而不能加x鎖,直到t釋放a上的s鎖

兩段鎖協議

事務分為兩個階段

第一階段是獲得封鎖,也稱為擴充套件階段

第二階段是釋放封鎖,也稱為收縮階段

封鎖技術可以有效地解決並行操作的一致性問題,但也帶來了一些新的問題:

活鎖由於系統排程的原因,某些事務的加鎖請求得不到響應而永遠等待下去,稱為活鎖。

解決辦法

採用合理的排程方法,如先來先服務(fcfs)策略。

死鎖兩個或多個事務都已封鎖了一些資料物件,然後又都請求對已被其他事務封鎖的資料物件加鎖,從而出現死等待

解決辦法:

(1)預防死鎖

一次封鎖法:

要求每個事務必須一次將所有要使用的資料全部加鎖,否則就不繼續執行。

順序封鎖法

順序封鎖法是預先對資料物件規定乙個封鎖順序,所有事務都按這個順序進行封鎖。

(2)診斷與解除死鎖

在作業系統中廣為採用的預防死鎖的策略並不適合資料庫的特點,dbms在解決死鎖的問題上更普遍採用的是診斷並解除死鎖的方法。

超時法:

如果乙個事務的等待時間超過了規定的許可權,就認為發生了死鎖。

等待圖法:

用事務等待圖動態反應所有事務的等待情況。

事務等待圖是乙個有向圖g=(t,u)

t為節點的集合,每個節點表示正執行的事務

u為邊的集合,每條邊表示事務等待的情況

若t1等待t2,則t1,t2之間畫一條有向邊,從t1指向t2

併發控制子系統週期性的檢測事務等待圖,如果發現圖中存在迴路,則表示系統中出現了死鎖。

解除死鎖:選擇乙個處理代價最小的事務,將其撤銷,釋放此事務持有的所有的鎖,使其他事務能夠繼續執行下去。

mysql資料庫sql注入原理 SQL注入原理

結構化查詢語句 structured query language,縮寫 sql 是一種特殊的程式語言,用於資料庫中的標準資料查詢語言。sql注入 sql injection 是一種常見的web安全漏洞,攻擊者利用這個問題,可以訪問或者修改資料,或者利用潛在的資料庫漏洞進行攻擊。什麼是sql注入?s...

資料庫原理系列 基本SQL語言

sql語言是集ddl dml和dcl於一體的資料庫語言 sql語言主要由以下9個單詞引導的操作語句來構成,但每一種語句都能表達複雜的操作請求 dml語句引導詞 insert,delete,update,select dcl語句引導詞 grant,revoke ddlddl data definiti...

資料庫原理

基本內容 acid與cap 資料庫事務可能引發的問題 資料庫鎖的型別 封鎖協議 兩段鎖協議 資料庫隔離級別 mvcc的實現步驟 mysql事務如何實現 資料庫鎖如何實現 xa兩段提交協議。1.acid是資料庫事務正確執行的四個基本要素 原子性 事務是資料庫併發控制的最小單位,要麼全部提交成功,要麼全...