BEGIN

Começa uma transação na sessão atual.

START TRANSACTION é um sinônimo de BEGIN.

Consulte também:

COMMIT , ROLLBACK , SHOW TRANSACTIONS , DESCRIBE TRANSACTION

Sintaxe

BEGIN [ { WORK | TRANSACTION } ] [ NAME <name> ]

START TRANSACTION [ NAME <name> ]
Copy

Parâmetros

WORK | TRANSACTION

Palavras-chave opcionais que proporcionam compatibilidade com outros sistemas de banco de dados.

NAME name

Cadeia de caracteres opcional que atribui um nome à transação. Um nome ajuda a identificar uma transação, mas não é necessário e não precisa ser único.

Notas de uso

  • Todas as transações têm uma ID interna gerada pelo sistema. A ID de transação é um número inteiro assinado de 64 bits (de comprimento). O intervalo de valores é de -9.223.372.036.854.775.808 (-2 63) a 9.223.372.036.854.775.807 (2 63 – 1).

  • Se você especificar um nome para uma transação, a palavra-chave NAME é necessária.

  • Se um nome não for especificado, um nome gerado pelo sistema é atribuído à transação.

  • Para concluir uma transação, um comando COMMIT ou ROLLBACK deve ser explicitamente executado. Até que um destes comandos seja executado, a transação permanece em aberto.

  • Quando uma instrução SQL consulta um fluxo dentro de uma transação explícita, o fluxo é consultado no ponto de avanço do fluxo (ou seja, o carimbo de data/hora) quando a transação começou, e não quando a instrução foi executada. Este comportamento diz respeito tanto a instruções DML como instruções CREATE TABLE … AS SELECT (CTAS) que preenchem uma nova tabela com linhas de um fluxo existente.

  • Se duas instruções BEGIN em uma linha forem executadas (dentro do mesmo escopo), a segunda será ignorada. Por exemplo, no código a seguir, o segundo e terceiro BEGINs não têm efeito; a transação em aberto existente continua.

    begin;
    begin;    -- Ignored!
    insert into table1 ...;
    begin;    -- Ignored!
    insert into table2 ...;
    commit;
    
    Copy

    As regras podem ser mais complexas se você estiver usando transações autônomas com escopo e procedimentos armazenados.

Exemplos

Nota

Estes exemplos não incluem os comandos necessários para completar as transações. Para exemplos de transações completas, consulte COMMIT ou ROLLBACK.

Iniciar uma transação:

BEGIN;

SHOW TRANSACTIONS;

+---------------+--------+--------------+--------------------------------------+-------------------------------+---------+
|            id | user   |      session | name                                 | started_on                    | state   |
|---------------+--------+--------------+--------------------------------------+-------------------------------+---------|
| 1530042321085 | USER1  | 223347060798 | 56cb9163-77a3-4223-b3e0-aa24a20540a3 | 2018-06-26 12:45:21.085 -0700 | running |
+---------------+--------+--------------+--------------------------------------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION()

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042321085         |
+-----------------------+
Copy

Observe o nome designado pelo sistema, 56cb9163-77a3-4223-b3e0-aa24a20540a3, para a transação.

Iniciar uma transação com um nome especificado:

BEGIN NAME T1;

SHOW TRANSACTIONS;

+---------------+--------+--------------+------+-------------------------------+---------+
|            id | user   |      session | name | started_on                    | state   |
|---------------+--------+--------------+------+-------------------------------+---------|
| 1530042377426 | USER1  | 223347060798 | T1   | 2018-06-26 12:46:17.426 -0700 | running |
+---------------+--------+--------------+------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION();

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042377426         |
+-----------------------+
Copy

O mesmo que o exemplo anterior, mas usando START TRANSACTION em vez de BEGIN:

START TRANSACTION NAME T2;

SHOW TRANSACTIONS;

+---------------+--------+--------------+------+-------------------------------+---------+
|            id | user   |      session | name | started_on                    | state   |
|---------------+--------+--------------+------+-------------------------------+---------|
| 1530042467963 | USER1  | 223347060798 | T2   | 2018-06-26 12:47:47.963 -0700 | running |
+---------------+--------+--------------+------+-------------------------------+---------+

SELECT CURRENT_TRANSACTION();

+-----------------------+
| CURRENT_TRANSACTION() |
|-----------------------|
| 1530042467963         |
+-----------------------+
Copy