Mam tabelę użytkowników i mam 5 rekordów.Cofanie zmian nie działa w MySQL
Usunąłem dwa rekordy, a następnie wykonałem polecenie rollback, wykonane pomyślnie.
Ale to usunięto dwa rekordy nie odzyskane.
Silnik stołu użytkownika to InnoDB.
Mam tabelę użytkowników i mam 5 rekordów.Cofanie zmian nie działa w MySQL
Usunąłem dwa rekordy, a następnie wykonałem polecenie rollback, wykonane pomyślnie.
Ale to usunięto dwa rekordy nie odzyskane.
Silnik stołu użytkownika to InnoDB.
powinna być w stanie cofnąć transakcję jako silnik InnoDB jest stół.
Anyways tutaj jest poprawny sposób to zrobić transakcje,
SET autocommit=0;
START TRANSACTION;
Your Query here.
ROLLBACK;
i upewnij się, że nie używasz COMMIT
po Query które trzeba wycofać. Patrz Table Engines i . A gdy tworzone jest połączenie DB, domyślnie znajduje się ono w trybie automatycznego zatwierdzania. Oznacza to, że każda pojedyncza instrukcja SQL jest traktowana jako transakcja i jest automatycznie zatwierdzana zaraz po jej wykonaniu. Jeśli więc chcesz sam dokonać transakcji, musisz wyłączyć tryb automatycznego zatwierdzania przez AUTOCOMMIT = 0
. Więcej informacji można znaleźć tutaj: link.
Używam bezpośrednio rozpocząć transac i wycofać. ale nie używam polecenia autocommit SET = 0; . ale dla mnie działało wycofanie trasnaction. chciałbym znać cel tego autocommit SET = 0; – Bharanikumar
@Bharanikumar: Po utworzeniu połączenia DB domyślnie jest ono w trybie automatycznego zatwierdzania. Oznacza to, że każda pojedyncza instrukcja SQL jest traktowana jako transakcja i jest automatycznie zatwierdzana zaraz po jej wykonaniu. Jeśli więc musisz sam wykonać transakcję, musisz wyłączyć tryb autocommit przez 'set AUTOCOMMIT = 0'. Więcej informacji można znaleźć na stronie http://dev.mysql.com/doc/refman/5.0/en/innodb-implicit-commit.html –
dzięki –
By default, MySQL starts the session
for each new connection with
autocommit enabled,
Można ustawić automatyczne zatwierdzanie trybu wyłączyć przed uruchomieniem zapytanie
SET autocommit=0;
ref:
nie działa .... dla mnie ... próbowałem jak na dev-mysql-support – Bharanikumar
Upewnij się już wykonać polecenie
start transaction;
przed kwerendy usunąć.
nie mam pojęcia o tym ... jak zrobić polecenie rozpocznij transakcję. .. – Bharanikumar
SET autocommit=0;
BEGIN;
.
.
.
ROLLBACK;
Mam ten sam problem, ale sprawdziła wsparcia innodb
pierwsze: sprawdzić, czy InnoDB Engine jest dostępnych: z tego:
mysql> show engines;
jeśli InnoDB jest wyłączona wówczas
Po drugie: przejdź do pliku "mój.ini”, w moim przypadku jest w C: \ AppServ \ mysql w tym pliku usuwa "#" linii
#default-storage-engine=INNODB -> default-storage-engine=INNODB
a linia skip-innodb Add "#"
skip-innodb -> #skip-innodb
po trzecie:.. zapisać i ponownie uruchomić usługę mySQL, a problem został rozwiązany
ja nie wiem, czy były stoły blokowania, ale wpadłem na ten sam problem, gdzie wydawało się, wycofywania nie działa
ramach moich transakcji nazwałem "LOCK TABLES ...", który
pośrednio zobowiązuje każdą aktywną transakcję przed próbą zablokowania tabele
(http://dev.mysql.com/doc/refman/5.0/en/lock-tables-and-transactions.html)
skończyło się blokowanie poza (przed) transakcją, ponieważ to była pierwsza rzecz, którą robiłem w transakcji. Alternatywnie, można to zrobić za docs sugerują:
SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;
Myślę, że jest jedna ważna rzecz mówiąc: ponowne włączenie trybu automatycznego po transakcja jest wykonywana.
SET autocommit = 0;
START TRANSACTION;
INSERT INTO ..
UPDATE <table> ..
COMMIT;
SET autocommit = 1;
Inaczej coś zrobić po wyłączeniu autocommit
nawet bez transakcji będzie wymagać wyraźnie popełnić.
Tytuł twojego pytania jest * bardzo * potężny! To brzmi jak język hiszpański, gdy * wszyscy faceci na MySQL dopingują podczas pisania kodu, a wszyscy użytkownicy końcowi używają doped db! * .. lol. MySQL DB to wielka sprawa! Nie możesz po prostu rzucić w to oskarżenia :) –