事務()
下面的例子演示了Microsoft SQL Server中嵌套事務的概念它使用內置的@@TRANCOUNT函數來跟蹤已初始化的事務的數量
BEGIN TRANSACTION trans
the transaction counter @@TRANCOUNT =
INSERT INTO <table> VALUES <values>
BEGIN TRANSACTION trans
the transaction counter @@TRANCOUNT =
INSERT INTO <table> VALUES <values>
BEGIN TRANSACTION trans
the transaction counter @@TRANCOUNT =
INSERT INTO <table> VALUES <values>
COMMIT TRANSACTION trans
Nothing committed at this point but the transaction
counter is decremented by ; @@TRANCOUNT =
COMMIT TRANSACTION trans
Nothing committed at this point but the transaction counter
is decremented by ; @@TRANCOUNT =
COMMIT TRANSACTION trans
All INSERTs are committed to the database
the transaction counter is decremented by ; @@TRANCOUNT =
在這個例子中為了將條記錄插入到表中初始化了個事務只有最後一個COMMIT語句才會實際地將修改永久保存到表中
回滾事務
當需要取消對數據的修改時應該使用ROLLBACK回滾事務在最後的COMMIT語句之前都可以發出ROLLBACK命令ROLLBACK命令的結果是自動回滾自啟動當前控制事務以來所做的全部修改
除了Microsoft SQL Server 中用戶命名的事務和一些可選的子句之外在所有RDBMS中以及SQL標准中回滾事務的語法都是相同的下面的語句試圖更新LIBRARY數據庫的BOOKS表中的BK_PRICE列但是所有的修改都將被回滾
UPDATE book
SET bk_price =
WHERE bk_id=
ROLLBACK WORK
與COMMIT語句一樣如果發出了ROLLBACK語句那麼所有的鎖都將被釋放表列出了特定於各個廠商的ROLLBACK語句
表 各廠商特定的ROLLBACK語句
WORK子句是可選的TOSAVEPOINT子句將在本章隨後進行解釋FORCE子句附屬於分布式事務它的行為非常類似於COMMIT語句中FORCE子句的功能Microsoft SQL Server則具有一個可選的<transaction name>子句
由於某些語句(例如DDL語句)在語句執行之前或執行之後自動地發出一條COMMIT語句因此在該DDL語句之前發生的對數據的修改也會被提交
保存點
通常情況下一個事務包含了一個以上的SQL語句你可能想COMMIT或ROLLBACK某些SQL語句為了增強事務處理的粒度引入了SAVEPOINT(保存點)的概念保存點允許在事務中定義一個命名的位置通常是查詢中某些重要操作之後的裡程碑如果在之後發生了錯誤可以回滾所有的修改但不是回滾到事務一開始而只是回滾到特定的保存點如果顯式(或隱式就像在一個DDL語句之後)發出了一條COMMIT語句將釋放在事務中聲明的所有保存點
下面是一個在SQL批語句中使用SAVEPOINT的例子
UPDATE books
SET bk_price =
WHERE bk_id = ;
SAVEPOINT first_update;
DELETE books
WHERE bk_id = ;
SAVEPOINT first_delete;
DELETE books
WHERE bk_id = ;
ROLLBACK first_update;
COMMIT;
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16448.html