0

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 つのクエリを確認する必要がある状況 (一部の (ほとんどの) 銀行やその他の金融アプリケーションのように) はありません。データ、成功。

これは主に、そのようなものを制御したいという願望から生まれています (そして、自動コミット機能には特定の欠如があります)。

4

1 に答える 1

2

多くの場合、答えは次のとおりです。確実にしたい場合は

update(x);
update(y);

つまり、両方の更新が実行されるか、何も実行されない場合は、自動コミットをオフにする必要があります。クエリを 1 つだけ実行する場合は、トランザクションを自分で制御する必要はありません。唯一のトランザクションが失敗した場合、ロールバックするものは何もありませんよね?

関連するメモ:トランザクションのACID プロパティについて読みたいと思うかもしれません。

于 2011-03-16T23:51:10.470 に答える