2010-06-22 11 views
5

Przeszukałem dokumentację MySql i niczego nie znalazłem. Próbowałem to ... ROLLBACK nie wydaje się, aby anulować wkładki wykonane w Tabela1 i tabela2Czy MySql może wycofać transakcję sql w wielu tabelach?

Start Transaction; 

INSERT INTO Table1(field1,field2) VALUES (value1, value2); 

INSERT INTO Table2(field3,field4) VALUES (value3, value4); 

INSERT INTO Table3(field5,field6) VALUES (value5, value6); 

Rollback; 

UPDATE: Dzięki za wszystkie odpowiedzi, ale zapomniałem powiedzieć, że 3. Oświadczenie Zgłasza wyjątek (Naruszenie ograniczeń).

+1

Czy używasz silnika transakcyjnego dla wszystkich tych tabel? – Paolo

+0

Tak ... InnoDB Engine –

Odpowiedz

1

W obecnej wersji MySql v5.1 ... nie obsługuje wycofywania zmian w wielu tabelach ... To może się zmienić (mam nadzieję) w najbliższej przyszłości!

+1

Zastanawiam się, czy to się zmieniło w wersji 5.6? –

2

warto dodać to na początku skryptu:

SET autocommit=0; 

Domyślnie MySQL wyda commit po każdej instrukcji, chyba że to powiedzieć inaczej.

+0

Próbowałem tego ... nie działa, jeśli błąd został zgłoszony w środku skryptu. –

+0

Niezbyt dobry pomysł, ponieważ jeśli omyłkowo usuniesz rekordy - nie będzie można wycofać transakcji. –

+0

Uruchom zestaw transakcji automatycznie autocommit off. –

8

Tak, ale tylko w przypadku tabel obsługujących transakcje. Aby sprawdzić, czy tabele są kompatybilne, to zrobić

SELECT table_name 
    , engine 
    FROM information_schema.tables t 
WHERE t.table_name IN('Table1','Table2','Table3'); 

Jeśli którykolwiek z nich są MyISAM, nie są one transakcjami kompatybilne. musisz zmienić je wszystkie do InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB; 

ale ostrzegamy - MyISAM obsługuje niektórych funkcji, które nie InnoDB, takich jak wyszukiwania pełnotekstowego.

Powiązane problemy