A resposta para sua pergunta depende se você está ou não em uma transação que abrange mais de uma declaração. (Você marcou a pergunta no InnoDB, a resposta seria diferente no MyISAM.)
No manual de referência: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Por padrão, o MySQL é executado com o modo de confirmação automática ativado. Isso significa que, assim que você executa uma instrução que atualiza (modifica) uma tabela, o MySQL armazena a atualização no disco para torná-la permanente.
Portanto, sim, por padrão, se você estiver apenas usando INSERT
, os registros inseridos serão confirmados e não há sentido em tentar revertê-los. (Isso é efetivamente o mesmo que agrupar cada instrução entre BEGIN
e COMMIT
.)
No entanto, se você estiver lidando com transações explicitamente, precisará usar COMMIT
para confirmar o armazenamento dos registros, mas também poderá usá-lo ROLLBACK
.
Você pode iniciar uma transação explicitamente usando START TRANSACTION
(ou BEGIN
). Isso é independente da autocommit
configuração (ativada por padrão):
Com START TRANSACTION, a confirmação automática permanece desativada até você finalizar a transação com COMMIT ou ROLLBACK. O modo de confirmação automática é revertido para o estado anterior.
Como alternativa, se autocommit=0
eu acho que qualquer declaração após outro final de transação iniciará uma transação (mas você ainda pode usar START TRANSACTION
explicitamente); é pelo menos assim que interpreto isso :
O modo de confirmação automática. Se definido como 1, todas as alterações em uma tabela entram em vigor imediatamente. Se definido como 0, você deve usar COMMIT para aceitar uma transação ou ROLLBACK para cancelá-la. Se a confirmação automática for 0 e você a alterar para 1, o MySQL executará um COMMIT automático de qualquer transação aberta. Outra maneira de iniciar uma transação é usar uma instrução START TRANSACTION ou BEGIN. Consulte a Seção 12.3.1, “Sintaxe START TRANSACTION, COMMIT e ROLLBACK”.
Mais especificamente, "outra maneira de iniciar uma transação" parece implicar que a configuração "confirmação automática = 0" é suficiente para iniciar uma transação (pelo menos antes de cada instrução no início de uma sessão ou que segue um COMMIT
/ ROLLBACK
). Eu sugeriria usar BEGIN
ou START TRANSACTION
explicitamente de qualquer maneira, mesmo que autocommit=0
, pois pode ficar mais claro para ver quando a transação inicia ou termina.
(Como você inicia uma transação pode depender da maneira como seu aplicativo usa o MySQL.)