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 BEGIN
i COMMIT
.)
Jeśli jednak masz do czynienia z transakcjami w sposób jawny, będziesz musiał użyć, COMMIT
aby 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 autocommit
ustawienia (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 TRANSACTION
jawnie); 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 BEGIN
lub START TRANSACTION
jawne, 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.)