BEGIN [ WORK | TRANSACTION ] [ modo_da_transação [, ...] ] onde modo_da_transação é um entre: ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED } READ WRITE | READ ONLY
O comando BEGIN inicia um bloco de transação, ou seja, todos os comandos após o BEGIN são executados em uma única transação, até ser encontrado um COMMIT ou ROLLBACK explícito. Por padrão (sem o BEGIN), o PostgreSQL executa as transações no modo de auto-efetivação (autocommit), ou seja, cada comando é executado em sua própria transação, e se a execução for bem-sucedida será realizada implicitamente uma efetivação (commit) no fim do comando, senão a transação será desfeita (rollback). [1] [2] [3] [4] [5]
Os comandos são executados mais rapidamente em um bloco de transação, porque cada início/efetivação de transação requer uma atividade significativa de CPU e de disco. A execução de vários comandos dentro de uma transação também é útil para garantir a consistência ao se fazer várias modificações relacionadas: as outras sessões não conseguem ver os estados intermediários até que todas as modificações relacionadas tenham sido sido feitas.
Se for especificado o nível de isolamento, ou o modo de leitura/escrita, a nova transação possuirá estas características, como se tivesse sido executado SET TRANSACTION.
Palavras chave opcionais. Não produzem nenhum efeito.
Para obter informações sobre o significado dos outros parâmetros deste comando deve ser consultado SET TRANSACTION.
START TRANSACTION possui a mesma funcionalidade do BEGIN.
Use COMMIT ou ROLLBACK para terminar um bloco de transação.
Executar o comando BEGIN dentro de um bloco de transação provoca uma mensagem de advertência. O estado da transação não é afetado. Para aninhar transações dentro de um bloco de transação devem ser utilizados pontos de salvamento (consulte SAVEPOINT).
Por motivo de compatibilidade com as versões anteriores, podem ser omitidas as vírgulas entre modos_da_transação sucessivos.
O comando BEGIN é uma extensão do PostgreSQL à linguagem. É equivalente ao comando START TRANSACTION do padrão SQL, que deve ser visto para obter informações adicionais sobre a compatibilidade.
Por acaso a palavra chave BEGIN é utilizada com uma finalidade diferente na linguagem SQL incorporada. Deve ser tomado muito cuidado com relação à semântica da transação quando aplicativos de banco de dados são migrados.
[1] |
Oracle — No Oracle a transação começa quando o primeiro comando SQL executável é encontrado. Um comando SQL executável é um comando SQL que gera uma chamada para uma instância, incluindo os comandos da DML e da DDL. Quando a transação começa, o Oracle atribui a transação a um espaço de tabelas de desfazer disponível para registrar as entradas de desfazer para a nova transação. A transação termina quando ocorre um dos seguintes eventos: a) O usuário submete o comando COMMIT, ou ROLLBACK sem a cláusula SAVEPOINT; b) O usuário executa um comando da DDL, como CREATE, DROP, RENAME ou ALTER. Se a transação corrente tiver comandos da DML, primeiro o Oracle efetiva a transação e, depois, executa e efetiva os comandos da DDL como uma transação nova de um único comando; c) O usuário se desconecta do Oracle (A transação corrente é efetivada); d) O processo usuário termina de forma anormal. (A transação corrente é desfeita). Após uma transação terminar, o próximo comando SQL executável começa automaticamente a próxima transação. Oracle® Database Concepts 10g Release 1 (10.1) Part Number B10743-01 (N. do T.) |
[2] |
SQL Server — O modo autocommit é o modo de gerenciamento de transação padrão para o Mecanismo de Banco de Dados do SQL Server. Todo comando Transact-SQL é efetivado ou desfeito ao completar. Se o comando terminar bem-sucedido, será efetivado; se ocorrer algum erro, será desfeito. Uma conexão com uma instância do Mecanismo de Banco de Dados opera no modo autocommit sempre que este modo não tiver sido mudado por transações explícitas ou implícitas. O modo autocommit também é o modo padrão para ADO, OLE DB, ODBC e DB-Library. A conexão com uma instância do Mecanismo de Banco de Dados opera no modo autocommit até um comando BEGIN TRANSACTION iniciar uma transação explícita, ou o modo de transação implícita ser ativado. Quando a transação explícita é efetivada ou desfeita, ou quando o modo de transação implícita é desativado, a conexão retorna ao modo autocommit. SQL Server 2005 Books Online — Autocommit Transactions (N. do T.) |
[3] |
SQL Server — O comando BEGIN TRANSACTION marca o ponto inicial de uma transação local explícita. O comando BEGIN TRANSACTION incrementa a variável @@TRANCOUNT (número de transações ativas para a conexão corrente) em 1. BEGIN TRANSACTION representa um ponto onde os dados referenciados pela conexão estão logicamente e fisicamente consistentes. Se forem encontrados erros, todas as modificações nos dados feitas após o BEGIN TRANSACTION poderão ser desfeitas para que os dados retornem a este estado de consistência conhecido. A transação continua existindo até completar sem erros e ser submetido o comando COMMIT TRANSACTION, para tornar as modificações parte permanente do banco de dados, ou até serem encontrados erros e todas as modificações serem apagadas pelo comando ROLLBACK TRANSACTION. SQL Server 2005 Books Online — BEGIN TRANSACTION (Transact-SQL) (N. do T.) |
[4] |
SQL Server — BEGIN...END delimitam uma série de comandos Transact-SQL de modo que possa ser executado um grupo de comandos Transact-SQL. BEGIN e END são fluxo de controle de palavras chave da linguagem. Os blocos BEGIN...END podem ser aninhados. Embora todos os comandos Transact-SQL sejam válidos dentro do bloco BEGIN...END, certos comandos Transact-SQL não devem ser colocados juntos no mesmo lote, ou bloco de comandos. SQL Server 2005 Books Online — BEGIN...END (Transact-SQL) (N. do T.) |
[5] |
DB2 — A unidade de trabalho começa implicitamente quando é submetido o primeiro comando SQL para o banco de dados. Todas as leituras e escritas seguintes feitas pelo mesmo aplicativo são consideradas como sendo parte da mesma unidade de trabalho. O aplicativo deve terminar a unidade de trabalho submetendo o comando COMMIT ou ROLLBACK. O comando COMMIT torna permanente todas as modificações realizadas na unidade de trabalho. O comando ROLLBACK desfaz estas modificações no banco de dados. Se o aplicativo terminar normalmente sem submeter nenhum destes dois comandos, a unidade de trabalho será efetivada automaticamente. Se terminar de forma anormal no meio da unidade de trabalho, a unidade de trabalho será desfeita automaticamente. Uma vez submetidos, os comandos COMMIT e ROLLBACK não podem ser parados. Em alguns aplicativos multi-threaded, e em alguns sistemas operacionais (como o Windows®), se o aplicativo terminar normalmente sem que nenhum destes dois comandos tenha sido explicitamente submetido, a unidade de trabalho será desfeita automaticamente. Recomenda-se que os aplicativos sempre efetivem ou desfaçam explicitamente as unidades de trabalho completadas. Se parte da unidade de trabalho não completar bem-sucedida as atualizações serão desfeitas, deixando as tabelas participantes como estavam antes da transação começar, garantindo assim que as requisições não serão nem perdidas nem duplicadas. DB2 Version 9 for Linux, UNIX, and Windows (N. do T.) |