Если проблема что-то вроде « Эта вставка нарушила уникальный ключ », то будет выполнена фиксация. Вы должны проверить, вернули ли запрос ошибки, и если да, то 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;