Если у вас есть смесь кода, который требует явных транзакций и кода, который может полагаться на автокоммит, возможно, вам не следует отключать автокоммит для всех соединений. Вы на правильном пути, гадая, повлияет ли это на другой код. Если вы отключите автокоммит, но другой код не знает, что он должен фиксировать, чтобы его работа была зафиксирована, тогда это будет проблемой. Неподтвержденная работа откатывается при закрытии соединения.
Вы должны знать, что механизм хранения по умолчанию для MySQL - MyISAM , который вообще не поддерживает транзакции. Когда вы вносите изменения в таблицу, в которой используется MyISAM, эти изменения вступают в силу немедленно, независимо от ваших явных запросов на начало и завершение транзакций, а также независимо от состояния автоматической фиксации. Таким образом, вы не сможете откатиться ни на что, если только вы не создали свои таблицы с использованием механизма хранения InnoDB (или других механизмов хранения с безопасными транзакциями, таких как BDB ).
не нужно , чтобы отключить режим автоматической фиксации для использования транзакций в MySQL. Просто начните транзакцию явно. Следующие операторы SQL будут являться частью транзакции до тех пор, пока вы не подтвердите или не откатите эту транзакцию независимо от значения autocommit для текущего соединения.
http://dev.mysql.com/doc/refman/5.0/en/commit.html говорит:
С START TRANSACTION, автокоммит
остается отключенным, пока вы не закончите
транзакция с помощью COMMIT или ROLLBACK.
Режим автоматической фиксации затем возвращается к
его предыдущее состояние.