Files
doris/docs/en/sql-reference/sql-statements/Data Manipulation/SHOW TRANSACTION.md
pengxiangyu 7592f52d2e [Feature][Insert] Add transaction for the operation of insert #6244 (#6245)
## Proposed changes
Add transaction for the operation of insert. It will cost less time than non-transaction(it will cost 1/1000 time) when you want to insert a amount of rows.
### Syntax

```
BEGIN [ WITH LABEL label];
INSERT INTO table_name ...
[COMMIT | ROLLBACK];
```

### Example
commit a transaction:
```
begin;
insert into Tbl values(11, 22, 33);
commit;
```
rollback a transaction:
```
begin;
insert into Tbl values(11, 22, 33);
rollback;
```
commit a transaction with label:
```
begin with label test_label;
insert into Tbl values(11, 22, 33);
commit;
```

### Description
```
begin:  begin a transaction, the next insert will execute in the transaction until commit/rollback;
commit:  commit the transaction, the data in the transaction will be inserted into the table;
rollback:  abort the transaction, nothing will be inserted into the table;
```
### The main realization principle:
```
1. begin a transaction in the session. next sql is executed in the transaction;
2. insert sql will be parser and get the database name and table name, they will be used to select a be and create a pipe to accept data;
3. all inserted values will be sent to the be and write into the pipe;
4. a thread will get the data from the pipe, then write them to disk;
5. commit will complete this transaction and make these data visible;
6. rollback will abort this transaction
```

### Some restrictions on the use of update syntax.
1. Only ```insert``` can be called in a transaction.
2. If something error happened, ```commit``` will not succeed, it will ```rollback``` directly;
3. By default, if part of insert in the transaction is invalid, ```commit``` will only insert the other correct data into the table.
4. If you need ```commit``` return failed when any insert in the transaction is invalid, you need execute ```set enable_insert_strict = true``` before ```begin```.
2021-07-21 10:54:11 +08:00

2.6 KiB

title, language
title language
SHOW TRANSACTION en

SHOW TRANSACTION

description

This syntax is used to view transaction details for the specified transaction id or label name.

grammar:

SHOW TRANSACTION
[FROM db_name]
WHERE
[id = transaction_id]
[label = label_name];

Example return result:

     TransactionId: 4005
             Label: insert_8d807d5d-bcdd-46eb-be6d-3fa87aa4952d
       Coordinator: FE: 10.74.167.16
 TransactionStatus: VISIBLE
 LoadJobSourceType: INSERT_STREAMING
       PrepareTime: 2020-01-09 14:59:07
        CommitTime: 2020-01-09 14:59:09
        FinishTime: 2020-01-09 14:59:09
            Reason:
ErrorReplicasCount: 0
        ListenerId: -1
         TimeoutMs: 300000
  • TransactionId: transaction id
  • Label: the label of the corresponding load job
  • Coordinator: the node responsible for transaction coordination
  • TransactionStatus: transaction status     * PREPARE: preparation stage     * COMMITTED: The transaction was successful, but the data is not visible     * VISIBLE: The transaction was successful and the data is visible     * ABORTED: transaction failed
  • LoadJobSourceType: The type of the load job.
  • PrepareTime: transaction start time
  • CommitTime: the time when the transaction was successfully committed
  • FinishTime: The time when the data is visible
  • Reason: error message
  • ErrorReplicasCount: Number of replicas with errors
  • ListenerId: the id of the related load job
  • TimeoutMs: transaction timeout time in milliseconds

example

  1. View the transaction with id 4005:

    SHOW TRANSACTION WHERE ID = 4005;

  2. Specify the db and view the transaction with id 4005:

    SHOW TRANSACTION FROM db WHERE ID = 4005;

  3. View the transaction with label label_name:

    SHOW TRANSACTION WHERE LABEL = 'label_name';

keyword

SHOW, TRANSACTION