回答:
トランザクションをCOMMITまたはROLLBACKしない限り、トランザクションは「実行中」であり、ロックを保持している可能性があります。
クライアント(アプリケーションまたはユーザー)がコミットする前にデータベースへの接続を閉じると、実行中のトランザクションはすべてロールバックされて終了します。
実際にこれを試すことができ、これがどのように機能するかを理解するのに役立ちます。
Management Studioで2つのウィンドウ(タブ)を開きます。各ウィンドウには、SQLへの独自の接続があります。
これで、1つのウィンドウでトランザクションを開始し、挿入/更新/削除などを実行できますが、まだコミットはできません。次に、別のウィンドウで、トランザクションの外側からデータベースがどのように見えるかを確認できます。分離レベルによっては、最初のウィンドウがコミットされるまでテーブルがロックされる場合や、他のトランザクションがこれまでに何を行ったかなどがわかる場合があります。
さまざまな分離レベルとロックヒントなしで遊んで、結果にどのように影響するかを確認します。
また、トランザクションでエラーをスローするとどうなるかを確認してください。
このすべてがどのように機能するかを理解することは非常に重要です。そうしないと、SQLの機能に何度も悩まされることになります。
楽しんで!GJ。
着信トランザクションの分離レベルに依存します。
トランザクションを開くと、何もロックされません。ただし、そのトランザクション内でクエリを実行すると、分離レベルに応じて、一部の行、テーブル、またはページがロックされるため、他のトランザクションからアクセスしようとする他のクエリに影響します。
トランザクションの例
トランTTを始める
SQLステートメント
エラーが発生した場合、ロールバックトランザクションtt、それ以外はコミットトランザクションtt
commit tran ttを実行していない限り、データは変更されません
BEGIN TRAN X ... BEGIN TRAN Y ... ROLLBACK Y
たとえば、機能しません。stackoverflow.com/questions/1273376/…を
コミットされていないトランザクションはサーバーをロックしたままにし、他のクエリはサーバーで実行されません。トランザクションをロールバックするか、コミットする必要があります。SSMSを終了するとトランザクションも終了し、他のクエリを実行できるようになります。
動作は定義されていないため、コミットまたはロールバックを明示的に設定する必要があります。
http://docs.oracle.com/cd/B10500_01/java.920/a96654/basic.htm#1003303
「自動コミットモードが無効で、最後の変更を明示的にコミットまたはロールバックせずに接続を閉じると、暗黙的なCOMMIT操作が実行されます。」
Hsqldbがロールバックする
con.setAutoCommit(false);
stmt.executeUpdate("insert into USER values ('" + insertedUserId + "','Anton','Alaf')");
con.close();
結果は
2011-11-14 14:20:22,519メインINFO [SqlAutoCommitExample:55] [AutoCommit enabled = false] 2011-11-14 14:20:22,546メインINFO [SqlAutoCommitExample:65] [データベースで0#ユーザーが見つかりました]