質問: こんにちは、beginトランザクションについてご質問したいです。 検証しますが、 phpでbegin;した後aというデータをdeleteした場合に、 そのプログラムが終わった場合は、deleteしないと思います。 ただ、そのbeginトランザクションもスクリプトが終了した瞬間に消えると思っています。 ブラウザから、ファイルを叩いて、トランザクションが残りロックがかかりっぱなしになったとかそういう可能性があるのでしょうか? そもそもbeginトランザクションの概念がわかっていません。 ないと思っていますが、可能性があるなら教えてください。 宜しくお願いします。 実際に確認したら、begin後、updateをした後にファイルを終了したら、updateが元に戻っていたので、戻る状態ですね。 しっかりとcommit、rollbackを意識していきます。
回答: > > ブラウザから、ファイルを叩いて、トランザクションが残りロックがかかりっぱなしになったとかそういう可能性があるのでしょうか? > > > 私の知る限り、ほとんどのデータベースでは、開始されたトランザクションがcommit、またはrollbackされないまま接続が切断されたトランザクションは自動的にrollbackされます。 基本的にはこの動作が正常に機能している限りはロックがかかりっぱなしになることはないでしょう。 ただし、データベースやドライバ、スクリプトの実装方法や設定内容などにより結果は異なります。 例えば、1つのデータベースへの接続を1つのセッション内で共有している場合では1つのスクリプトが終了しても、セッションが切れるまで接続が切れないため、この時点では自動的にrollbackはかからず、ロックがかかりっぱなしになるでしょう。 一番確実なのは、トランザクションを開始したら、開始した処理が責任をもってcommitなりrollbackなりで終了させることです。 接続が切れることによる自動的なrollbackはフェールセーフ的な機能と認識し、それに頼るコーディングは避けるべきです。 また、「begin transaction」は「トランザクションを開始する」という意味です。 データベースにおけるトランザクションについては、説明すると長くなりますし、他にもっとうまく説明されている文献があると思いますので説明はそちらに譲りたいと思います。 いかがでしょうか?