事務(Transaction0):要么全做,要么全不做;
事務ACID:原子性Atomicity;一致性Consistency;隔離性Isolation;持久性Durability;
并發操作問題:
????????1.丟失更新;(同時提交數據時,t2的事務會并發導致t1的事務修改被丟失)
????????2.不可重復讀;(事務A首先讀取了一條數據,然后執行邏輯的時候,事務B將這條數據改變了,然后事務A再次讀取的時候,發現數據不匹配了,就是所謂的不可重復讀了)
????????3.讀 ' 臟 ' 數據;(并發情況下,事務2讀取到事務1修改到一半就回退的數據,讀取的數據有誤)
封鎖是最常用的并發控制技術:
????????基本思想為:需要時,事務通過向系統請求對它所希望的數據對象(數據庫中的記錄)加鎖,以確保它不會被非預期改變;
鎖的概念:實質上就是一個允許或阻止一個事務對一個數據對象的存取特權;
1.基本的封鎖類型有兩種:排他鎖(Exclusive Lock,X鎖)和共享鎖(SharedLock,S鎖)
2.用封鎖對進行并發控制:
? ? ? ? 2.1?若事務T對數據D加了X鎖,則所有別的事務對數據D的鎖請求都必須等待直到事務T釋放鎖;
? ? ? ? 2.2?若事務T對數據D加了S鎖,則別的事務還可對數據D請求S鎖,而對數據D的X鎖請求必須等待直到釋放鎖;
? ? ? ? 2.3?事務執行數據庫操作時都要先請求相應的鎖,即對讀請求S鎖,對更新(插入、刪除、修改)請求X鎖;
? ? ? ? 2.4?事務一直占有獲得的鎖直到結束(COMMIT或ROLLBACK)時釋放;
3.封鎖的粒度:
????????通常以粒度來描述封鎖的數據單元的大小;DBMS(數據庫管理系統)可以決定不同粒度的鎖;有最底層的數據元素到最高層的整個數據庫,粒度越細,并發性越大,但軟件復雜性和系統開銷也就越大;
4.封鎖的級別:
? ? ? ? 4.1?0級封鎖:封鎖的事務不重寫其它非0級封鎖事務的未提交的更新數據。這種狀態實際上實用價值不大;
? ? ? ? 4.2?1級封鎖:被封鎖的事務不允許重寫未提交的更新數據,這防止丟失更新的發生;
? ? ? ? 4.3?2級封鎖:被封鎖的事務既不重寫也不讀未提交的更新數據,這除了1級封鎖的效果外還防止了讀臟數據;
? ? ? ? 4.4?3級封鎖:被封鎖的事務不讀未提交的更新數據,不寫任何(包含讀操作的)未提交的數據;
? ? ? ? 4.5?活鎖與死鎖:
? ? ? ? ? ? ? ? 4.5.1?封鎖帶來的一個重要問題是困難引起“活鎖”與“死鎖”;
? ? ? ? ? ? ? ? 4.5.2 鎖:級別低的事務無法執行;可采用先來先服務的策略解決;
? ? ? ? ? ? ? ? 4.5.3?死鎖:兩個以上事務循環等待被同組中另一事務鎖住的數據單元的情形,稱為“死鎖”;
???????????????? - 如何解決: 1. 一次性鎖請求; 2. 鎖請求排序; 3. 序列化處理;4. 資源剝奪; - 對待死鎖的另一種方法是不去防止,而讓其發生并隨時進行監測,一旦監測到系統已發生了死鎖再進行解除處理;
????????6. 可串行性:一組事務是一個調度就是它們的基本操作的一種排序;通常,在數據庫系統中,*可串行性是并發執行的正確性準則,即當且僅當一組事務的并發執行調度是可串行化的,才認為它們是正確的;
????????7. 兩段封鎖法: 1. 事務劃分成兩個階段:1.發展(Growing)或加鎖階段;2.收縮(Shrinking)或釋放鎖階段;