標籤:style blog http color 使用 io ar 資料 art
SQL事務 一、事務概念 事務是一種機制、是一種操作序列,它包含了一組資料庫操作命令,這組命令要麼全部執行,要麼全部不執行。因此事務是一個不可分割的工作邏輯單元。在資料庫系統上執行並行作業時事務是作為最小的控制單元來使用的。這特別適用於多使用者同時操作的資料通訊系統。例如:訂票、銀行、保險公司以及證券交易系統等。 二、事務屬性事務4大屬性:1 原子性(Atomicity):事務是一個完整的操作。2 一致性(Consistency):當事務完成時,資料必須處於一致狀態。3 隔離性(Isolation):對資料進行修改的所有並發事務是彼此隔離的。4 持久性(Durability):事務完成後,它對於系統的影響是永久性的。 三、建立事務T-SQL中管理事務的語句:1 開始事務: begin transaction2 提交事務:commit transaction3 復原事務: rollback transaction 事務分類:1 明確交易:用begin transaction明確指定事務的開始。2 隱性事務:開啟隱性事務:set implicit_transactions on,當以隱性事務模式操作時,SQL Servler將在提交或復原事務後自動啟動新事務。無法描述事務的開始,只需要提交或復原事務。3 自動認可事務:SQL Server的預設模式,它將每條單獨的T-SQL語句視為一個事務。如果成功執行,則自動認可,否則復原。 樣本:張三轉800元到李四帳戶上。 use stuDBgo--建立帳戶表bank--if exists(select* from sysobjects where name=‘bank‘) drop table bankcreate table bank( customerName char(10), --顧客姓名 currentMoney money --當前餘額)go/*--添加約束,帳戶不能少於元--*/alter table bank add constraint CK_currentMoney check(currentMoney>=1)/*--插入測試資料--*/insert into bank(customerName,currentMoney)select ‘張三‘,1000 unionselect ‘李四‘,1select * from bankgo/*--使用事務--*/use stuDBgo--恢複原來的資料--update bank set currentMoney=currentMoney-1000 where customerName=‘李‘set nocount on --不顯示受影響的行數print ‘查看轉帳事務前的餘額‘select * from bankgo/*--開始事務--*/begin transactiondeclare @errorSum int --定義變數,用於累計事務執行過程中的錯誤/*--轉帳--*/update bank set currentMoney=currentMoney-800 where customerName=‘張三‘set @[email protected][email protected]@error --累計是否有錯誤update bank set currentMoney=currentMoney+800 where customerName=‘李四‘set @[email protected][email protected]@error --累計是否有錯誤print ‘查看轉帳事務過程中的餘額‘select * from bank/*--根據是否有錯誤,確定事務是提交還是復原--*/if @errorSum>0 begin print ‘交易失敗,復原事務.‘ rollback transaction endelse begin print ‘交易成功,提交事務,寫入硬碟,永久儲存!‘ commit transaction endgoprint ‘查看轉帳後的餘額‘select * from bankgo
本文來源於:http://blog.csdn.net/zerolsy/article/details/2123637
SQL事物用法【轉】