Sintaxe de START TRANSACTION
, COMMIT
e ROLLBACK
Por padrão, MariaDB é executado em modo autocommit. Isto significa que assim que você executa uma instrução que atualiza (modifica) uma tabela, o MariaDB armaena a atualização no disco.
Se você estiver usando tabelas com segurança a transação (como InnoDB
\ ou BDB
), você pode colocar o MariaDB em modo não autocommit com o seguinte comando:
SET AUTOCOMMIT=0
Depois de disabilitar o modo autocommit configurando a variável AUTOCOMMIT
com zero, você deve utilizar COMMIT
para armazenar suas alterações em disco ou ROLLBACK
se você deseja ignorar as alterações que você fez desde o início da sua transação.
Se você quiser disabilitar o modo autocommit para uma única série de instruções, você pode utiliar a instrução START TRANSACTION
:
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summmary=@A WHERE type=1; COMMIT;
BEGIN
e BEGIN WORK
podem ser usados em vez de START TRANSACTION
para iniciar uma transação. START TRANSACTION
foi adicionado no MariaDB 4.0.11; ele é uma sintaxe do SQL-99 e é o modo recomendado de iniciar umaa transação an ad-hoc. BEGIN
e BEGIN WORK
estão disponíveis a partir do MariaDB 3.23.17 e 3.23.19, respectivamente.
Note que se você estiver usando tabelas sem segurança a transação, quaisquer alterações serão armazenadas de uma vez, se considerar o status do modo autocommit.
Se você executar uma instrução ROLLBACK
depois de atualizar uma tabela não-transacional, você obterá um erro (ER_WARNING_NOT_COMPLETE_ROLLBACK
), como um aviso. Todas as tabelas seguras a transação serão restauradas mas qualquer tabela se segurança a transação não sofrerão alterações.
Se você estiver usando START TRANSACTION
ou SET AUTOCOMMIT=0
, você deve usar o log binário do MariaDB para backup no lugar do antigo log de atualização. Transações são armazenadas no log binário em um bloco, sobre COMMIT
, para assegurar que transações nas quais foram feitas rolled back não foram armazenadas. Leia "O Log Binário".
Você pode alterar o nível isolação para transações com SET TRANSACTION ISOLATION LEVEL
. Leia "Sintaxe SET TRANSACTION
".