SQL Server事務全攻略(一)
一 事務的屬性
事務具有ACID屬性,即 Atomic原子性,Consistent一致性, Isolated隔離性, Durable永久性
原子性
就是事務應作為一個工作單元,交易處理完成,所有的工作要麼都在資料庫中儲存下來,要麼完全
復原,全部不保留
一致性
事務完成或者撤銷後,都應該處於一致的狀態
隔離性
多個事務同時進行,它們之間應該互不干擾.應該防止一個交易處理其他事務也要修改的資料時,
不合理的存取和不完整的讀取資料
永久性
事務提交以後,所做的工作就被永久的儲存下來
二 事務並發處理會產生的問題
丟失更新
當兩個或多個事務選擇同一行,然後基於最初選定的值更新該行時,會發生丟失更新問題、
每個事務都不知道其它事務的存在。最後的更新將
重寫由其它事務所做的更新,這將導致資料丟失。
髒讀
當第二個事務選擇其它事務正在更新的行時,會發生未確認的相關性問題。第二個事務正在讀取的資料還沒有確認並且可能由更新此行的事務所更改。
不可重複讀取
當第二個事務多次訪問同一行而且每次讀取不同的資料時,會發生不一致的分析問題。不一致的分析與未確認的相關性類似,因為其它事務也是正在更改
第二個事務正在讀取的資料。然而,在不一致的分析中,第二個事務讀取的資料是由已進行了更改的事務提交的。而且,不一致的分析涉及多次(兩次或更多)讀取
同一行,而且每次資訊都由其它事務更改;因而該行被非重複讀取。
幻像讀
當對某行執行插入或刪除操作,而該行屬於某個事務正在讀取的行的範圍時,會發生幻像讀問題。事務第一次讀的行範圍顯示出其中一行已不複存在於第
二次讀或後續讀中,因為該行已被其它事務刪除。同樣,由於其它事務的插入操作,事務的第二次或後續讀顯示有一行已不存在於原始讀中。
三 交易處理類型
自動處理事務
系統預設每個T-SQL命令都是交易處理 由系統自動開始並提交
隱含交易
當有大量的DDL 和DML命令執行時會自動開始,並一直保持到使用者明確提交為止,切換隱含交易可以用SET
IMPLICIT_TRANSACTIONS 為串連設定隱性事務模式.當設定為 ON 時,SET IMPLICIT_TRANSACTIONS
將串連設定為隱性事務模式。當設定為 OFF 時,則使串連返回到自動認可事務模式
使用者定義事務
由使用者來控制事務的開始和結束 命令有: begin tran commit tran rollback tran 命令
分散式交易
跨越多個伺服器的事務稱為分散式交易,sql server 可以由DTc microsoft distributed
transaction coordinator
來支援處理分散式交易,可以使用 BEgin distributed
transaction 命令啟動一個分散式交易處理