事務處理:
1)開始事務(begin transaction)
2)送出事務(commit transaction)
3)復原事務(rollback transaction)
4)事務儲存點(save transaction savepoint_name、rollback transaction savepoint_name、set implicit_transactions on/set implicit_transactions off)
并發控制(封鎖/死鎖):
封鎖是并發控制的主要技術。其基本思想是:當需要查詢或更新資料時,先對資料進行封鎖,以避免來自其他事務的幹擾。資料庫管理系統一般提供三種封鎖機制,即共享封鎖、獨占封鎖和更新封鎖。封鎖的對象既可以使關系,也可以是元祖。1)共享封鎖(S封鎖)是為讀操作設定的一種封鎖,是以也稱讀封鎖,在讀資料的過程中,不允許其他使用者對該資料進行任何修改操作。2)獨占封鎖(X封鎖)是為修改操作設定的一種封鎖,也稱為寫封鎖,這是最嚴格的一類封鎖。在需要對表進行插入、删除或更新操作時,應該使用獨占封鎖。3)在不插入或删除的情況下,當需要對一個記錄或一組記錄進行更新時使用更新封鎖,該封鎖的目的是防止其他使用者在同一時刻修改同一記錄。有些封鎖在執行完相應操作後就自動釋放封鎖,有些封鎖則保持到事務結束時才釋放。
SQL Server的封鎖操作通過WITH子句完成,該短語可以在select、insert、update和delete等語句中制定鎖定的方式和範圍。
如:select * from customers with(tablock holdlock)
tablock:表示共享封鎖,在讀完資料後立刻釋放封鎖。
holdlock:與tablock一起使用,可将共享鎖保留到事務完成,而不是在讀完資料後立即釋放鎖。
nolock:不進行封鎖,此關鍵詞僅應用于select語句。
tablockx:對表進行獨占封鎖。
updlock:對表中的制定元祖實施更新封鎖,實施更新封鎖後其他事務可以對同一表中的元祖也實施更新封鎖,但是不允許對表進行共享封鎖和獨占封鎖。
為了提高并發性能,資料庫管理系統還支援一種意向鎖(Intension Lock)的機制。
意向鎖:
1)意向共享(IS)
2)意向排他(IX)
3)共享意向排他(SIX)。
為避免幹擾而使用封鎖,但是如果封鎖不當,則會出現死鎖問題。如兩個事務A和B,為完成某個事務都需要封鎖客戶和産品兩個關系,這兩個事務正好按照交錯序列執行,結果兩個程式都因為等待對方釋放資源而産生死鎖。
為避免死鎖,通常采取兩種方法:
1)相同順序法:所有的使用者程式約定都按相同的順序來封鎖表。
2)一次封鎖法:為了完成一個事務,一次性封鎖所需要的全部表。