PHP mysqli :: автокоммит VS "START TRANSACTION" - PullRequest
3 голосов
/ 12 января 2010

В нашем объекте уровня базы данных мы всегда управляли транзакциями с помощью операторов SQL "START TRANSACTION", "ROLLBACK" и "COMMIT", выполняемых с помощью mysqli :: query.

Проводя некоторые исследования сегодня, я обнаружил это упоминание в руководстве MySQL относительно использования вызовов уровня API для управления транзакцией VS с использованием прямого SQL:

Важно

Многие API, используемые для написания MySQL клиентские приложения (такие как JDBC) предоставить свои собственные методы для запуска транзакции, которые могут (а иногда и следует использовать вместо отправки Заявление о начале транзакции от клиент. См. Главу 20 «Разъемы и API, или документация для вашего API, для получения дополнительной информации.

И, присмотревшись к mysqli, обнаружил методы mysqli :: autocommit, mysqli :: rollback и mysqli :: commit для управления транзакцией (http://us.php.net/manual/en/class.mysqli.php).

Мой вопрос: лучше ли использовать эти эквиваленты mysqli и почему? Я нигде не могу найти упоминаний о том, что эти функции работают лучше, чем их прямые аналоги SQL.

1 Ответ

5 голосов
/ 12 января 2010

Возможно, могут быть причины, по которым оболочка доступа к данным должна знать, когда была запущена / завершена транзакция. Например, в моей голове, схема пула соединений должна знать, когда было завершено ранее использованное соединение в середине транзакции, и не возвращать его в пул соединений для повторного использования в этом случае.

Мне не известны какие-либо проблемы в mysqli, которые требовали бы от вас использования нативного метода, а не версии SQL, но, возможно, в общем случае ... вот почему он только «иногда должен». В любом случае, метод PHP легче читать, чем версию SQL-строки, так что я бы сказал, что все равно пойдет с этим.

...