Ако проблемът е нещо като „Това вмъкване наруши уникален ключ ", комитът ще се осъществи. Трябва да проверите сами дали заявката е върнала грешки и ако е така, ROLLBACK
.
Ако проблемът е например неочаквано изключване на сървъра, заявки 1 и 2 няма да се осъществят.
Разбира се, тъй като вашите 3 заявки тук са еднакви, това е глупав пример. Поне сменете lid
да видиш. Защо не направите бърз тест?
Редактиране:редактирахте въпроса си относно целта на транзакциите.
Целта на транзакциите наистина е да поддържа базата данни в последователно състояние (прочетете на ACID ), но програмистът трябва да реши кое е последователно. Вижте отговора на prodigitalson за да видите пример за възможен php начин за улавяне на грешки, който прави това вместо вас. Но докато сте в транзакция, другите процеси няма да видят промените, които вашата транзакция прави – следователно атомни и изолирани.
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;