數據庫視頻---遊標和事務和鎖

遊標

概述:
遊標是一種數據訪問機制,允許用戶訪問單獨的數據行,而不是對整個行集進行操作。用戶可以單獨處理每一行逐條收集信息並對數據逐行進行操作,可以降低系統開銷和潛在的阻隔情況。用戶可以用這些數據生成SQL代碼並立即執行或輸出

組成:
1.遊標結果集 由定義遊標的SELECT語句返回的行的集合
2.遊標位置 指向這個結果集中的某一行的指針

特點:
1.遊標返回一個完整的結果集,但允許程序設計語言只調用集合中的一行
2.允許定位在結果集的特定行
3.從結果及的當前位置檢索一行或多行
4支持對結果集中當前位置的行進行數據修改
5.可以爲其他用戶對顯示在結果集中的數據庫數據所做的更改提供不同級別的可見性支持
6.提供腳本、存儲過程和觸發器中使用的訪問結果集中數據的T-SQL語句

遊標的聲明:

DECLARE cursor_name [INSENSITIVE][SCROLL]CURSOR
FOR select_statement
[FOR{READ ONLY|UPDATE[OF column_name[,...n]]}]

SCROLL 指定遊標位置定義過程:
打開遊標:

OPEN {{[GLOBAL]cursor_name}|cursor_variable_name}

檢索遊標:

FETCH
	[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|RELATIVE{n|@nvar}]
		FROM]
{{[GLOBAL]cursor_name}|@cursor_variable_name}
[INTO@variable_name[,...n]]

關閉遊標:

CLOSE {{[GLOBAL]cursor_name}|cursor_variable_name}

釋放遊標:

DEALLOCATE {{[GLOBAL]cursor_name}|cursor_variable_name}

判斷遊標提取狀態:

使用@@FETCH—STATUS變量獲取提取狀態

取值:
1.返回0,FETCH語句成功
2.返回-1,語句失敗或者行不在結果集中
3.返回-2,提取不存在

事務
事務是數據庫管理系統執行過程中的一個邏輯單位,由一個有限的數據庫操作序列構成。一個數據庫事務通常包含了一個序列的對數據庫的讀/寫操作。
BEGIN TRANSACTION
COMMIT TRANSACTION
ROLLBACK TRANSACTION
SAVE TRANSACTION 

開始事務
提交事務,結束事務
回滾事務(出現錯誤)
保存事務

事務的存在包含有以下兩個目的:

爲數據庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持一致性的方法;

當多個應用程序在併發訪問數據庫時,可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。

SQL Server 2008事務模式
1.自動提交事務 每條單獨的語句都是一個事務
2.顯式事務 每個事務均以Begin Transaction語句顯示開始,以 Commit或Rollback語句顯式結束
3.隱式事務 在前一個事務完成時新事務隱式啓動,但每個事務仍以Commit或Rollback語句顯式完成
4.批處理級事務
只能用於多個活動結果集,在MARS會話中啓動的T-SQL顯式或隱式事務變爲批處理級事務。當批處理完成時沒有提交或回滾的批處理級事務自動由SQL Server進行回滾

封鎖:
就是一個事務可向系統提出請求,對被操作的數據加鎖。其他事務必須等到此事務解鎖之後才能訪問該數據。從而,在多個用戶併發訪問數據庫時,確保不相互干擾。
可鎖定的單位:
行,頁,表,盤區和數據庫

鎖的類型:

共 享 S 鎖 用於讀操作,多個事務可封鎖一個共享單位的數據;任何事務都不能修改加S鎖的數據;通常加S鎖的數據被讀取完畢,S鎖就立即被釋放。
獨佔 X鎖 用於寫操作,僅允許一個事務封鎖此共享數據;其他任何事務必須等到X鎖被釋放才能對該數據進行訪問;X鎖一直到事務結束才能被釋放。
更新U鎖 用來預定要對此頁施加X鎖,它允許其他事務讀,但是不允許再施加U鎖或X鎖;當被讀取數據頁將要被更新時,則升級爲X鎖;U鎖一直到事務結束時才能被釋放。

死鎖:
是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,他們將都無法推進下去,此時稱系統處於死鎖狀態或系統產生了死鎖

必要條件:
1.互斥條件:一個資源每次只能被一個進程使用
2.請求與保持條件
3.不剝奪條件
4.循環等待條件
只要上述條件之一不滿足,就不會發生死鎖

死鎖的解除和防禦:
1.按同意順序訪問對象
2.避免事務中的用戶交互
3.保持事務簡短並在一個批處理中
4。使用低隔離級別
5.使用綁定連接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章