找工做——數據庫

1. SQL的四種鏈接-左外鏈接、右外鏈接、內鏈接、全鏈接

2. 事務:是用戶定義的一個數據庫操做序列,這些操做要麼全作,要麼全不作,是一個不可分割的工做單位。事務是恢復和併發控制的基本單位html

事務的ACID特性:數據庫

  • 原子性(Atomicity):事務中包括的諸操做要麼都作,要麼都不作
  • 一致性(Consistency):事務執行的結果必須是使數據庫從一個一致性狀態變到另外一個一致性狀態   (一致性狀態:數據庫中只包含成功事務提交的結果。  不一致狀態:數據庫中包含失敗事務的結果)
  • 隔離性(Isolation):一個事務的執行不能被其餘事務干擾
  • 持續性(Durability ):一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其餘操做或故障不該該對其執行結果有任何影響。

多事務執行方式 :併發

  (1)事務串行執行:每一個時刻只有一個事務運行,其餘事務必須等到這個事務結束之後方能運行;不能充分利用系統資源,發揮數據庫共享資源的特色post

  (2)交叉併發方式:事務的並行執行是這些並行事務的並行操做輪流交叉運行;是單處理機系統中的併發方式,可以減小處理機的空閒時間,提升系統的效率url

  (3)同時併發方式:多處理機系統中,每一個處理機能夠運行一個事務,多個處理機能夠同時運行多個事務,實現多個事務真正的並行運行;最理想的併發方式,但受制於硬件環境spa

併發操做帶來的數據不一致性:htm

  • 丟失修改(lost update):丟失修改是指事務1與事務2從數據庫中讀入同一數據並修改事務2的提交結果破壞了事務1提交的結果,致使事務1的修改被丟失。
  • 不可重複讀(non-repeatable read):不可重複讀是指事務1讀取數據後,事務2執行更新操做,使事務1沒法再現前一次讀取結果。

    三類不可重複讀:事務1讀取某一數據後:對象

    1。事務2對其作了修改,當事務1再次讀該數據時,獲得與前一次不一樣的值。blog

    2. 事務2刪除了其中部分記錄,當事務1再次讀取數據時,發現某些記錄神密地消失了。事務

    3. 事務2插入了一些記錄,當事務1再次按相同條件讀取數據時,發現多了一些記錄。

    後兩種不可重複讀有時也稱爲幻影現象(phantom row)

  • 讀「髒」數據(dirty read):事務1修改某一數據,並將其寫回磁盤事務2讀取同一數據後事務1因爲某種緣由被撤消,這時事務1已修改過的數據恢復原值事務2讀到的數據就與數據庫中的數據不一致,是不正確的數據,又稱爲「髒」數據
封鎖:
就是事務T在對某個數據對象(例如表、記錄等)操做以前,先向系統發出請求,對其加鎖。加鎖後事務T就對該數據對象有了必定的控制,在事務T釋放它的鎖以前,其它的事務不能更新此數據對象。封鎖是實現併發控制的一個很是重要的技術。
基本封鎖類型:
  • 排它鎖(eXclusive lock,簡記爲X鎖):若事務T對數據對象A加上X鎖,則只容許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖
  • 共享鎖(Share lock,簡記爲S鎖):若事務T對數據對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖
封鎖協議:在運用X鎖和S鎖對數據對象加鎖時,須要約定一些規則:封鎖協議(Locking Protocol)什麼時候申請X鎖或S鎖;持鎖時間、什麼時候釋放。
 不一樣的封鎖協議,在不一樣的程度上爲併發操做的正確調度提供必定的保證。經常使用的封鎖協議:三級封鎖協議
1級封鎖協議:事務T在修改數據R以前必須先對其加X鎖,直到事務結束才釋放
  1級封鎖協議可防止丟失修改。    在1級封鎖協議中,若是是讀數據,不須要加鎖的,因此它不能保證可重複讀和不讀「髒」數據。
2級封鎖協議:1級封鎖協議+事務T在讀取數據R前必須先加S鎖,讀完後便可釋放S鎖
  2級封鎖協議能夠防止丟失修改和讀「髒」數據。  在2級封鎖協議中,因爲讀完數據後便可釋放S鎖,因此它不能保證可重複讀。
3級封鎖協議:1級封鎖協議 + 事務T在讀取數據R以前必須先對其加S鎖,直到事務結束才釋放
  3級封鎖協議可防止丟失修改、讀髒數據和不可重複讀。
相關文章
相關標籤/搜索