Odpowiedź na twoje pytanie zależy od tego, czy jesteś w transakcji, która obejmuje więcej niż jedno oświadczenie. (Oznaczono to pytanie InnoDB, odpowiedź byłaby inna w przypadku MyISAM).
Z podręcznika: http://dev.mysql.com/doc/refman/5.1/en/commit.html
Domyślnie MySQL działa z włączonym trybem automatycznego zatwierdzania. Oznacza to, że jak tylko wykonasz instrukcję, która aktualizuje (modyfikuje) tabelę, MySQL przechowuje aktualizację na dysku, aby stała się trwała.
Tak, domyślnie, jeśli tylko używasz INSERT, wstawiane rekordy zostaną zatwierdzone i nie ma sensu próbować ich przywracać. (Jest to w rzeczywistości to samo, co zawijanie każdej instrukcji pomiędzy BEGINi COMMIT.)
Jeśli jednak masz do czynienia z transakcjami w sposób jawny, będziesz musiał użyć, COMMITaby zatwierdzić przechowywanie zapisów, ale będziesz również mógł z nich korzystać ROLLBACK.
Możesz jawnie rozpocząć transakcję, używając START TRANSACTION(lub BEGIN). Jest to niezależne od autocommitustawienia (domyślnie włączone):
Dzięki START TRANSACTION automatyczne zatwierdzanie pozostaje wyłączone, dopóki nie zakończysz transakcji za pomocą COMMIT lub ROLLBACK. Tryb automatycznego zatwierdzania powraca następnie do poprzedniego stanu.
Alternatywnie, jeśli autocommit=0, moim zdaniem, jakiekolwiek oświadczenie po innym zakończeniu transakcji, rozpocznie transakcję (ale nadal możesz użyć START TRANSACTIONjawnie); tak przynajmniej interpretuję to :
Tryb automatycznego zatwierdzania. Jeśli ustawione na 1, wszystkie zmiany w tabeli zaczną obowiązywać natychmiast. Jeśli ustawione na 0, musisz użyć COMMIT, aby zaakceptować transakcję lub ROLLBACK, aby ją anulować. Jeśli autocommit ma wartość 0 i zmienisz go na 1, MySQL wykonuje automatyczne COMMIT każdej otwartej transakcji. Innym sposobem rozpoczęcia transakcji jest użycie instrukcji START TRANSACTION lub BEGIN. Zobacz Sekcja 12.3.1, „ROZPOCZNIJ TRANSAKCJĘ, ZAPISZ SIĘ i SKŁADUJ ROLLBACK”.
Mówiąc dokładniej, „inny sposób rozpoczęcia transakcji” wydaje się sugerować, że ustawienie „autocommit = 0” jest wystarczające do rozpoczęcia transakcji (przynajmniej tuż przed każdą instrukcją na początku sesji lub następującą po COMMIT/ ROLLBACK). Sugerowałbym użycie BEGINlub START TRANSACTIONjawne, nawet jeśli autocommit=0, ponieważ może to ułatwić zrozumienie, kiedy transakcja się rozpoczyna lub kończy.
(Sposób rozpoczęcia transakcji może zależeć od sposobu, w jaki aplikacja korzysta z MySQL.)