2011-03-16 15 views
0

MySQLでトランザクションを使う考えは良いです。何かがうまくいかなかった場合にトランザクションをロールバックできるという考えも良いことです。PHPと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つのクエリは成功します。

これは主に、そのような種類のもの(および自動コミット機能では特定の欠点)を制御したいという理由から生まれたものです。

+0

質問:達成したいのは何ですか? – middus

答えて

2

よくあることは答えは次のとおりです。

update(x); 
update(y); 

がアトミックであることを確認するには、自動更新をオフにする必要があります。 1つのクエリを実行している場合は、トランザクションを自分で制御する必要はありません。唯一のトランザクションが失敗した場合、ロールバックするものはありません。

関連するノート:トランザクションのACID propertiesについてお読みください。

関連する問題