OceanBase TRANSACTION

2021-06-30 11:48 更新

描述

該語(yǔ)句用于開(kāi)啟事務(wù)。

數(shù)據(jù)庫(kù)事務(wù)(Database Transaction)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。事務(wù)處理可以用來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,保證成批的 SQL 操作全部執(zhí)行或全部不執(zhí)行。

顯示事務(wù)是用戶自定義或用戶指定的事務(wù)。通過(guò)BEGIN TRANSACTION,或BEGINBEGIN WORK(被作為 START TRANSACTION的別名受到支持)語(yǔ)句顯示開(kāi)始,以COMMITROLLBACK語(yǔ)句顯示結(jié)束。

格式

transaction_stmt:
      START TRANSACTION [READ ONLY | READ WRITE];
    | BEGIN [WORK];
    | COMMIT [WORK];
    | ROLLBACK [WORK];
    | SET TRANSACTION {READ ONLY | READ WRITE};

參數(shù)解釋

參數(shù)

描述

START TRANSACTION [READ ONLY | READ WRITE]

開(kāi)啟事務(wù)語(yǔ)句。一旦開(kāi)啟事務(wù),則隨后的 SQL 數(shù)據(jù)操作語(yǔ)句(即INSERT、UPDATE、DELETE等)直到顯式提交時(shí)才會(huì)生效。

READ ONLY 子句表示事務(wù)是只讀方式開(kāi)啟,事務(wù)內(nèi)不允許執(zhí)行修改操作。

READ WRITE 子句表示事務(wù)是讀寫(xiě)方式開(kāi)啟,默認(rèn)就是此種模式。

BEGIN

BEGIN 和 BEGIN WORK 被作為 START TRANSACTION 的別名受到支持

COMMIT

提交當(dāng)前事務(wù)。

ROLLBACK

回滾當(dāng)前事務(wù)。

SET TRANSACTION {READ ONLY | READ WRITE}

將當(dāng)前事務(wù)設(shè)置成READ ONLY或者READ WRITE模式。

示例

假設(shè)現(xiàn)有表 a 如下所示。

id

name

num

sell_date

1

a

100

2013-06-21 10:06:43

2

b

200

2013-06-21 13:07:21

3

a

50

2013-06-21 13:08:15

CREATE TABLE a (id INT,name VARCHAR(10),num INT,sell_date DATE);
INSERT INTO a VALUES (1, 'a',100,'2013-06-21 10:06:43');

INSERT INTO a VALUES (2, 'b',200,'2013-06-21 13:07:21');
INSERT INTO a VALUES (3, 'a',50,'2013-06-21 13:08:15');
  1. 依次執(zhí)行以下命令開(kāi)始執(zhí)行事務(wù),將 id 為 3 的的 name 改為 c,并插入一行當(dāng)前賣(mài)出 a 的記錄。

  2. obclient> START TRANSACTION;
    Query OK, 0 rows affected (0.00 sec)
    
    obclient> UPDATE a SET name = 'c' WHERE id = 3;
    Query OK, 1 rows affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    obclient> INSERT INTO a VALUES (4, 'a', 30, '2013-06-21 16:09:13');
    Query OK, 1 rows affected (0.00 sec)
    
    obclient> COMMIT;
    Query OK, 0 rows affected (0.00 sec)
  3. 事務(wù)提交后,執(zhí)行命令查看表 a 信息。

obclient>SELECT * FROM a;

結(jié)果如下:

id

na

num

sell_date

1

a

100

2013-06-21 10:06:43

2

b

200

2013-06-21 13:07:21

3

c

50

2013-06-21 13:08:15

4

a

30

2013-06-21 16:09:13

注意 
在事務(wù)還沒(méi)有 COMMIT 之前,您可以查看下本事務(wù)中的操作是否已經(jīng)生效,比如可以在 COMMIT 前,加一句 SELECT * FROM a; 。本事務(wù) Session 的訪問(wèn)能讀到最新的結(jié)果,本事務(wù) Session 之外的訪問(wèn)結(jié)果肯定是沒(méi)有生效,在事務(wù)還沒(méi)有 COMMIT 前,你之前做的操作除當(dāng)前事務(wù)連接之外都是不可見(jiàn)的。如果您想回滾該事務(wù),直接用 ROOLBACK 代替 COMMIT 。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)