三大經常使用關係型數據庫事務詳解之二:基本事務命令

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語句的執行,不須要特別指定事務的開始和結束,一個事務結束就意味着下一事務開始。事務終止於下列四種狀況:

  • 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;
相關文章
相關標籤/搜索