MYSQL + PHPでトランザクションを行うための記述例
トランザクションのサンプルコード
///////////////////////////////////////////////////////////////
//通常は、自動コミットが有効になっているのでクエリ入力後、すぐにコミット(データベースの更新処理)が行われる。
//トランザクション処理を行うため「SET AUTOCOMMIT=0」で自動コミットを無効する。
mysql_query(“SET AUTOCOMMIT = 0”); //オートコミットを無効にする
mysql_query(“begin”); //トランザクション開始
//—-この間に複数の処理を記述———————————-
$sql1 = “UPDATE テーブル名1 WHERE ~; //処理1
mysql_query($up_sql1) OR die(mysql_error());
$sql2 = “DELETE FROM テーブル名2 WHERE ~” //処理2
mysql_query($up_sql2) OR die(mysql_error());
//—-この間に複数の処理を記述 ここまで————————-
mysql_query(“commit”); //ここで上記二つの処理が同時に実行される
///////////////////////////////////////////////////////////////
//commitがないので絶対にテーブルは更新されないサンプルコード
///////////////////////////////////////////////////////////////
mysql_query(“SET AUTOCOMMIT = 0”);
mysql_query(“begin”); //トランザクション開始
$sql1 = “UPDATE テーブル名1 WHERE ~; //処理1
mysql_query($up_sql1) OR die(mysql_error());
$sql2 = “DELETE FROM テーブル名2 WHERE ~” //処理2
mysql_query($up_sql2) OR die(mysql_error());
mysql_query(“rollback”); //ロールバックなので実行されない
///////////////////////////////////////////////////////////////
※仮にロールバックがなくても、コミットせずに接続を閉じても、MySQLはそのトランザクションをロールバックするよう。
コミットとロールバックを細かく振り分けるなら、次のような記述ができる。
コミットとロールバックを振り分けるサンプルコード
///////////////////////////////////////////////////////////////
$sql1 = “UPDATE テーブル名1 WHERE ~; //処理
$result = mysql_query($sql1);
if( $result === true ){
mysql_query(“commit”); //確定
print “コミットしました”;
}else{
mysql_query(“rollback”); //巻き戻し
print “ロールバックしました”;
}
///////////////////////////////////////////////////////////////