二、事務基本命令介紹 說明:命令中, | (垂直條) 分隔括弧或大括弧中的語法項。 只能使用其中一項。[ ](方括弧) 可選語法項。 不要鍵入方括弧。{}(大括弧) 必選語法項。 不要鍵入大括弧。 1. SQL SERVER 1) BEGIN { TRAN | TRANSACTION } [ { t ...
二、事務基本命令介紹
說明:命令中,
| (垂直條) 分隔括弧或大括弧中的語法項。 只能使用其中一項。
[ ](方括弧) 可選語法項。 不要鍵入方括弧。
{}(大括弧) 必選語法項。 不要鍵入大括弧。
1. SQL SERVER
1) BEGIN { TRAN | TRANSACTION } [ { transaction_name | @tran_name_variable } [ WITH MARK [ 'description' ] ] ] [ ; ]
表示顯式地開啟一個名稱為transaction_name或@tran_name_variable的值的本地事務。
2)BEGIN DISTRIBUTED { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] [ ; ]
表示顯式地開啟一個名稱為transaction_name或@tran_name_variable的值的分散式事務
3)COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ] [ ; ]
表示提交事務並釋放事務使用資源,自事務開始以來的所有數據變更都會成為資料庫的永久部分。中括弧中內容可以省略,所以COMMIT事務的提交 與COMMIT TRANSACTION功能相同。
4)COMMIT [ WORK ] [ ; ]
提交並結束事務。與COMMIT TRANSACTION 功能相同,但 COMMIT TRANSACTION 接受指定事務名稱。 此語法與 SQL-92 相容。
5)ROLLBACK { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable | savepoint_name | @savepoint_variable ] [ ; ]
表示將事務回滾到起點或者指定保存點,以清除自事務的起點到某個保存點的所有數據更改,並釋放相關資源。中括弧中內容可以省略,ROLLBACK 事務的回滾與ROLLBACK TRANSACTION功能相同。
6)ROLLBACK [ WORK ] [ ; ]
將事務回滾到事務的起點。與 ROLLBACK TRANSACTION 功能相同,但 ROLLBACK TRANSACTION 可以指定事務名稱。此ROLLBACK 相容 ISO 標準。
嵌套事務時,ROLLBACK WORK 始終回滾到最遠的 BEGIN TRANSACTION 語句,並將 @@TRANCOUNT 系統函數減為 0
7)SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable } [ ; ]
在事務內設置事務保存點。savepoint_name是分配給保存點的名稱。@savepoint_variable是包含有效保存點名稱的用戶定義變數的名稱。
8)SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE }
設置事務隔離級別。
BEGIN TRANSACTION TR_ACCOUNTTRANSFER; --A賬號中減去1000元 UPDATE [dbo].[ACCOUNT] SET AMOUNT = AMOUNT -1000.00 WHERE [NAME] = 'A'; --B賬號中加上1000元 UPDATE [dbo].[ACCOUNT] SET AMOUNT = AMOUNT + 1000.00 WHERE [NAME] = 'B'; COMMIT TRANSACTION TR_ACCOUNTTRANSFER;
2. MYSQL
MySQL 中,只有使用了Innodb資料庫引擎的資料庫或表才支持事務。
1)START TRANSACTION | BEGIN [WORK]
START TRANSACTIOn或BEGIN [WORK]都用來開啟事務。
2)COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
提交當前事務,使自事務開始後的變更成為永久變更。
3)ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
回滾事務到事務起點,取消事務期間的所有變更。
4)SAVEPOINT identifier
在事務中創建指定標識符的保存點。
5)ROLLBACK [WORK] TO SAVEPOINT identifier
把事務回滾到指定的事務保存點。
6)RELEASE SAVEPOINT identifier
刪除指定的事務保存點。
7)SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
設置事務隔離等級。
BEGIN --A賬號中減去1000元 UPDATE ACCOUNT SET AMOUNT = AMOUNT -1000.00 WHERE NAME = 'A'; --B賬號中加上1000元 UPDATE ACCOUNT SET AMOUNT = AMOUNT + 1000.00 WHERE NAME = 'B'; COMMIT;
3. ORACLE
Oracle事務起始於第一條SQL語句的執行,不需要特別指定事務的開始和結束,一個事務結束就意味著下一事務開始。事務終止於下列四種情況:
- COMMIT或不帶有SAVEPOINT子句的ROLLBACK命令。
- 用戶運行DDL命令時,隱式提交。DDL命令如:CREATE,DROP,RENAME, or ALTER。
- 斷開資料庫連接時。
- 客戶進程異常終止,導致事務隱式回滾。
1)COMMIT
提交事務中所有更改,結束事務。
2)ROLLBACK
回滾事務中所有更改,結束事務。
3) SAVEPOINT identifier
創建保存點,以便可以事務中更改回滾到這個保存點。
4)ROLLBACK TO SAVEPOINT identifier
回滾事務中的更改到指定保存點。
5)RELEASE SAVEPOINT identifier
刪除指定保存點。
6)SET TRANSACTION [ READ ONLY | READ WRITE ]
[ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
[ USE ROLLBACK SEGMENT 'segment_name' ]
[ NAME 'transaction_name' ];
設置事務屬性。
--A賬號中減去1000元 UPDATE ACCOUNT SET AMOUNT = AMOUNT -1000.00 WHERE NAME = 'A'; --B賬號中加上1000元 UPDATE ACCOUNT SET AMOUNT = AMOUNT + 1000.00 WHERE NAME = 'B'; COMMIT;