2、事務基本命令介紹數據庫
說明:命令中,分佈式
| (垂直條) 分隔括號或大括號中的語法項。 只能使用其中一項。
[ ](方括號) 可選語法項。 不要鍵入方括號。
{}(大括號) 必選語法項。 不要鍵入大括號。ide
1. SQL SERVER函數
1) BEGIN { TRAN | TRANSACTION } [ { transaction_name | @tran_name_variable } [ WITH MARK [ 'description' ] ] ] [ ; ]spa
表示顯式地開啓一個名稱爲transaction_name或@tran_name_variable的值的本地事務。code
2)BEGIN DISTRIBUTED { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] [ ; ]blog
表示顯式地開啓一個名稱爲transaction_name或@tran_name_variable的值的分佈式事務進程
3)COMMIT [ { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ] [ WITH ( DELAYED_DURABILITY = { OFF | ON } ) ] [ ; ]事務
表示提交事務並釋放事務使用資源,自事務開始以來的全部數據變動都會成爲數據庫的永久部分。中括號中內容能夠省略,因此COMMIT事務的提交 與COMMIT TRANSACTION功能相同。ip
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語句的執行,不須要特別指定事務的開始和結束,一個事務結束就意味着下一事務開始。事務終止於下列四種狀況:
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;