二、事務基本命令介紹
說明:命令中,
| (垂直條) 分隔括號或大括號中的語法項, 只能使用其中一項,
[ ](方括號) 可選語法項, 不要鍵入方括號,
{}(大括號) 必選語法項, 不要鍵入大括號,
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/90889.html
標籤:MySQL
上一篇:MySQL架構和MySQL索引
