Por padrão, MySQL é executado em modo autocommit. Isto significa que assim que você executa uma instrução que atualiza (modifica) uma tabela, o MySQL 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 MySQL 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 MySQL 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 MySQL 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 MySQL 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. See Secção 4.10.4, “O Log Binário”.
Você pode alterar o nível isolação para transações com
SET TRANSACTION ISOLATION LEVEL
. See
Secção 6.7.6, “Sintaxe SET TRANSACTION
”.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.