Идея использования транзакций в MySQL хороша. Идея возможности откатить транзакцию, если что-то пойдет не так, также хороша.
У меня такой вопрос: стоит ли в приложении контролировать транзакцию самостоятельно или позволить MySQL позаботиться об этом за меня? Другими словами, должно ли быть активное недоверие к функции автоматической фиксации, которую дает мне MySQL?
Пример:
try
{
$mysqli->autocommit( 0 );
//Normally, would go through the steps of prepping and executing etc,
//but I'll use this for brevity.
if( !$mysqli->query( ".." ) )
throw new Exception( ".." );
$mysqli->commit( )
}
catch( Exception $e )
{
$mysqli->rollback( ); //Doing this so I make sure I get my rollback
error_log( ".." );
}
вместо того, чтобы позволить функции автоматической фиксации делать свою полезную работу.
Примечания: Приложение, которое я пишу, настроено только на выполнение одного запроса за раз, не будет ситуаций (как в некоторых (большинстве) банковских и других финансовых приложениях), где мне нужно убедиться, что запросы, которые изменяют данные, выполняются успешно.
Это в основном связано с желанием контролировать подобные вещи (и с определенным недостатком в функции автоматической фиксации).