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> ]
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;
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 | +-----------------------+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 | +-----------------------+
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 | +-----------------------+