クエリを実行しているとしましょう
begin tran
update users
set name = 'Jimmy'
where name = 'john'
トランザクションをロールバックしない場合でも、これらの変更は行われますか、それともエラーがスローされますか、それともロールバックとして機能しますか?
クエリを実行しているとしましょう
begin tran
update users
set name = 'Jimmy'
where name = 'john'
トランザクションをロールバックしない場合でも、これらの変更は行われますか、それともエラーがスローされますか、それともロールバックとして機能しますか?
回答:
トランザクションとは何かを理解する必要があります。これは単一の作業単位です。ALLまたはNOTHING(ACIDプロパティに従います)であり、これによりデータベースの一貫性が保証されます。
トランザクションをロールバックしない場合でも、これらの変更は行われますか
変更はコミットした場合にのみ行われます。SQLサーバーはトランザクションログへのすべての変更を記録し、コミットすると、データファイルに変更されます。
コミットしない場合、トランザクションは無期限にOPENのままになります。これは、で確認sys.dm_tran_active_transactions / sys.dm_tran_database_transactions / sys.dm_tran_session_transactionsまたは使用できますDBCC OPENTRAN。
また、開始したのは明示的なトランザクションであり、COMMITまたはROLLBACKステートメントで明示的に終了する必要があります。
またお読みください- 常にトランザクションを作成することは悪い習慣ですか?
トランザクションをコミットもロールバックもしない場合、トランザクションは無期限に存在し続けます。a commitまたはa を介してトランザクションを終了するrollbackか、DBAがセッションを終了するまで(またはネットワーク障害などにより接続が失敗するまで)、ロックを保持し続け、他のセッションをブロックする可能性があります。DBAがセッションを強制終了すると、暗黙的に、このトランザクションおよびその他の開いているトランザクションに対してロールバックが発行されます。