PHP и MySQL: сами выполняете транзакции? - PullRequest
0 голосов
/ 17 марта 2011

Идея использования транзакций в 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( ".." );
}

вместо того, чтобы позволить функции автоматической фиксации делать свою полезную работу.

Примечания: Приложение, которое я пишу, настроено только на выполнение одного запроса за раз, не будет ситуаций (как в некоторых (большинстве) банковских и других финансовых приложениях), где мне нужно убедиться, что запросы, которые изменяют данные, выполняются успешно.

Это в основном связано с желанием контролировать подобные вещи (и с определенным недостатком в функции автоматической фиксации).

1 Ответ

2 голосов
/ 17 марта 2011

Как часто и бывает, ответ: это зависит.Если вы хотите убедиться, что

update(x);
update(y);

является атомарным, т. Е. Выполняются оба обновления или ни одного, вам следует отключить автоматическую фиксацию.Если вы делаете только один запрос, вам не нужно контролировать транзакции самостоятельно.Если ваша единственная транзакция потерпит неудачу, откатывать будет нечего, верно?

В заметке по теме: вы можете прочитать о свойствах ACID транзакций.

...