質問

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( ".." );
}

AutoCommit機能に独自の便利な作業を行う代わりに。

注:私が執筆しているアプリケーションは、一度に1つのクエリを実行するためにのみ設定されています。(ほとんどの)銀行やその他の金融申請などの状況はありません。データ、成功。

これは、主にそのようなもの(およびオートコンミット機能の特定の不足)を制御したいと思っています。

役に立ちましたか?

解決

多くの場合、答えは次のとおりです。あなたがそれを確実にしたいなら

update(x);
update(y);

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

関連メモ:あなたはについて読みたいかもしれません 酸性特性 トランザクションの。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top