Jeśli problem jest podobny do „Ta wstawka naruszyła unikalny klucz ", nastąpi zatwierdzenie. Musisz sam sprawdzić, czy zapytanie zwróciło błędy, a jeśli tak, to ROLLBACK
.
Jeśli problemem jest na przykład nieoczekiwane zamknięcie serwera, zapytania 1 i 2 nie będą miały miejsca.
Oczywiście, ponieważ twoje 3 zapytania tutaj są takie same, jest to głupi przykład. Przynajmniej zmień lid
zobaczyć. Dlaczego nie zrobisz szybkiego testu?
Edytuj:edytowałeś swoje pytanie dotyczące celu transakcji.
Celem transakcji jest rzeczywiście utrzymanie bazy danych w spójnym stanie (przeczytaj ACID ), ale to programista decyduje, co jest spójne. Spójrz na odpowiedź prodigitalson aby zobaczyć przykład możliwego sposobu przechwytywania błędów przez php, który robi to za Ciebie. Ale gdy jesteś w transakcji, inne procesy nie zobaczą zmian, które robi Twoja transakcja - stąd niepodzielne i izolowane.
CREATE TABLE `testkeys` (
`lid` INT,
`column_name` VARCHAR(50),
UNIQUE KEY `testuniq` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
BEGIN;
INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
COMMIT;