sql >> データベース >  >> RDS >> Sqlserver

単一のステートメントに関するトランザクションは何をしますか?

    何もしません。すべての個々のSQLステートメント(ログのない一括挿入やテーブルの切り捨てなどのまれな例外を除く)は、明示的に言うかどうかに関係なく、自動的に「トランザクション内」になります。(数百万行を挿入、更新、または削除する場合でも) 。

    編集:以下の@Phillipのコメントに基づいています... SQL Serverの現在のバージョンでは、一括挿入とテーブルの切り捨てでさえいくつかを記述します。 他の操作ほどではありませんが、データをトランザクションログに記録します。トランザクションの観点からの重要な違いは、これらの他のタイプの操作では、変更されるデータベーステーブルのデータが、ロールバックできる状態のログにないことです。

    つまり、ステートメントがデータベース内のデータに加えた変更はトランザクションログに記録されるため、操作が失敗した場合に元に戻すことができます。

    「BeginTransaction」、「Commit Transaction」、および「RollBack Transaction」コマンドが提供する唯一の機能は、2つ以上の個別のSQLステートメントを同じトランザクションに入れることを可能にすることです。

    編集:(マークのコメントを補強するために...)はい、これは「迷信的な」プログラミングに起因する可能性があります。または、データベーストランザクションの性質に関する根本的な誤解を示している可能性があります。より慈善的な解釈は、それは単に一貫性の過剰適用の結果であり、不適切であり、エマーソン婉曲表現のさらに別の例であるということです:

    愚かな一貫性は、小さな心のホブゴブリンであり、
    小さな政治家や哲学者や神々に愛されています



    1. SQL ServerのTRIM、LTRIM、およびRTRIM関数

    2. Oracleが存在しない場合は挿入

    3. PreparedStatementでのsetDateの使用

    4. 複数のチェックボックス値をテーブルに挿入するにはどうすればよいですか?