MySQLを使っていて、トランザクション処理の記述方法でちょっとした疑問があったので調べてみた。
例えば、今までは以下のように書いていたのだけど、
$sql = "SET AUTOCOMMIT=0"; mysql_query($sql) or die(mysql_error()); $sql = "BEGIN"; mysql_query($sql) or die(mysql_error()); $sql = "INSERT or UPDATE"; if(mysql_query($sql)){ $sql = "COMMIT"; mysql_query($sql) or die(mysql_error()); }else{ $sql = "ROLLBACK"; mysql_query($sql) or die(mysql_error()); }
いちいち長い!メンドクサイ!
ってことで、MySQLの公式サイトでAUTOCOMMITについて調べてみると、
「自動コミットが無効化されたセッションの終了時に最後のトランザクションを明示的にコミットしなかった場合、MySQL はそのトランザクションをロールバックします。」
とあります。
ってことは、エラー処理しなくても、基本的には最後にコミットしない場合は、自動的にロールバックされるってことでしょ?
それなら
$sql = "SET AUTOCOMMIT=0"; mysql_query($sql) or die(mysql_error()); $sql = "BEGIN"; mysql_query($sql) or die(mysql_error()); $sql = "INSERT or UPDATE"; mysql_query($sql) or die(mysql_error()); $sql = "COMMIT"; mysql_query($sql) or die(mysql_error());
でいいじゃない!ってことに今気づきましたw
if文でネストしていって処理を書いてると、それだけでインデントがすごいことになるから、ちょっとでも減らせればOKじゃね?
エラー処理をdie任せにするなって苦情は受け付けない方向でw