PHPとMySQL:トランザクションを自分で実行しますか?
-
26-10-2019 - |
質問
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つのクエリだけを行っている場合、トランザクションを自分で制御する必要はありません。あなたの唯一のトランザクションが失敗した場合、ロールバックするものは何もありませんよね?
関連メモ:あなたはについて読みたいかもしれません 酸性特性 トランザクションの。
所属していません StackOverflow