SQL Server 2008編程入門經典筆記:事務

事務

1、BEGIN TRAN
開始事務

2、COMMIT TRAN
提交事務

3、ROLLBACK TRAN
回滾事務

4、SAVE TRAN(不推薦初學者使用)
保存要回滾的點。

SQL Server 日誌的工作方式

數據存入數據庫前,先存入緩存,在存入日誌,最後存入數據庫。
在書中的5中情況下會發出檢查點,判斷是否恢復。
1、失敗和恢復

2、隱式事務(危險的)

鎖和併發

併發是指同一時間多用戶執行同樣交互的操作。
鎖可以使相同操作的多個用戶,後來的進行等待。
1、通過鎖可以防止的問題
1)髒讀
一個事務讀取的是另一個未完成事務的值。
解決方法:事務隔離級別(READ COMMITTED)。
2)非重複性讀取
一個事務兩次讀取值,而另一個事務該變了值。
解決方法:
CHECK約束。
將隔離級別設置爲REPEATABLE READ或SERIALIZABLE。
3)幻讀
一些數據在進行修改的時候,剛好執行了插入操作,導致一些數據沒被修改。
解決方法:設置隔離級別爲:SERIALIZABLE
4)丟失更新
一個更新成功寫入數據庫後,而又意外的被另一個事務重寫了。

2、可以鎖定的資源
資源包括:數據庫、表、區段、頁、鍵、行或行標識符

3、鎖升級和鎖對性能的影響
當鎖數量達到一定的限度時,則會升級爲下一個更高的層次。

4、鎖定模式
1)共享鎖
共享鎖可以防止用戶執行髒讀。
2)排他鎖
可以防止兩個人同時更新、刪除或執行任何操作。
3)更新鎖
共享鎖+排他鎖
4)意向鎖
3種類型:意向共享鎖、意向排他鎖、共享意向排他鎖。
5)模式鎖
模式修改鎖:不能執行查詢、CREATE、ALTER、DROP操作
模式穩定性鎖定:類似共享鎖。
6)批量更新鎖
執行任何普通操作都會將表鎖定。

5、鎖的兼容性
見書389

6、指定一種特有的鎖定類型——優化器提示(高級)
1)使用Management Studio確定鎖

設置隔離級別

1)READ COMMITTED
可以防止髒讀。
2)READ UNCOMMITTED(最危險)
取消所有的鎖。
3)REPEATABLE READ
可以防止髒讀和非重複性讀取。
4)SERIALIZABLE
可以防止所有。
5)SNAPSHOT
類似READ COMMITTED和READ UNCOMMITTED。
只有數據庫打開了ALLOW_SNAPSHOT_ISOLATION選項時纔可以使用。

處理死鎖(1205錯誤)

1、SQL Server 判斷死鎖的方式
每隔5秒進行檢查

2、選擇死鎖的犧牲者的方式
選擇回滾代價最低的事務。

3、避免死鎖
1)按相同的順序使用對象。
2)使事務儘可能簡短。
3)儘可能使用最低的事務隔離級別。
4)不要採用允許無限中斷的事務。

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