明示的なトランザクションでは、トランザクションを開始するにはBEGIN TRANSを指定しますが、COMMIT、ROLLBACKまたはEND TRANSを指定しないと、アプリケーションには何が起こりますか?BEGIN TRANSを呼び出しても、COMMIT、ROLLBACK、またはEND TRANSを呼び出すと、結果はどうなりますか?
2
A
答えて
8
何もない - 取引はまだ進行中です。接続を終了すると、ロールバックされます。
6
トランザクションによってデータベースの一部がロックされる可能性があるため、これらのコマンドのいずれかを発行するまで、他のトランザクション/クエリがブロックされることがあります。
ある点では、途中でトランザクションが完了する必要があります。何か「間違っている」(アプリケーションが終了したなど)場合は、最初にコミットしない限り、ロールバックされます。
1
アプリケーションが終了すると、接続は暗黙的に閉じられ、ロールバックされます。
アプリケーションがASPNET、Javaアプリケーションサーバーなどのアプリケーションサーバーで実行されている場合は、おそらく接続がプールに戻され、再度使用される前にリセットされ、トランザクションが最終的にロールバックされます(しかしすぐにはそうではないかもしれない)。
未使用の接続がプール内にある場合、最終的にはアプリケーションサーバーによって閉じられ、その時点でトランザクションは確実にロールバックされます。
オープントランザクションが長すぎることに注意してください。ロックを保持して(何かを変更した場合)、古い行のクリーンアップを停止します。これは、チャーン "。
0
トランザクションを開いたままにすると、予期しない動作が発生します。アプリがプールに接続を戻したときにロールバックされない場合、ブロックされたトランザクションが発生します。 ロールバックすると、作業が失われます。いずれにしても、これは運用環境での動作ではありません。
/HåkanWinther
本当に悪いタイトル...少し詳しく説明してみてください –