[解決済み] 1つのステートメントにまつわるトランザクションは何をするのか?
質問
トランザクションがどのように一組の更新を調整するのに有用であるかは理解しています。 私が理解していないのは、トランザクションで単一のステートメントをラップすることであり、それは私がこれまで見てきたことの90%です。 実際、実際のコードでは、論理的に関連する一連のトランザクションがそれぞれ独自のトランザクションにラップされ、全体はトランザクションにラップされていないことが、私の経験ではより一般的です。
MS-SQL では、単一の選択、単一の更新、単一の挿入、または単一の削除をトランザクションでラップすることに何か利点がありますか?
これは迷信的なプログラミングではないでしょうか。
どのように解決するのですか?
何もしません。 個々の SQL 文はすべて (ログなしの一括挿入やテーブルの切り捨てなどのまれな例外を除いて)、明示的にそう言ったかどうかにかかわらず、自動的に "トランザクションに含まれます (たとえ数百万行の挿入や更新、または削除であっても)。(たとえ数百万行の挿入、更新、または削除が行われたとしても)。
編集: 下の @Phillip のコメントに基づいて... SQL Server の現在のバージョンでは、一括挿入とテーブルの切り捨てでさえ、次のように記述します。 いくつかの のデータをトランザクション ログに書き込みますが、他の操作ほどではありません。 トランザクションの観点から見た重要な違いは、これらの他のタイプの操作では、変更されるデータベース テーブルのデータは、ロールバックできる状態でログに残らないということです。
これが意味するのは、ステートメントがデータベース内のデータに加える変更は、操作が失敗した場合に元に戻すことができるように、トランザクション ログに記録されるということだけです。
Begin Transaction", "Commit Transaction" and "RollBack Transaction" コマンドが提供する唯一の機能は、2つ以上の個別の SQL 文を同じトランザクションに入れることができるようにすることです。
編集: (マークのコメントを補強するために...) はい、これは迷信的なプログラミングに起因することもあれば、データベース トランザクションの性質に対する根本的な誤解の表れである可能性もあります。 より慈悲深い解釈としては、単に不適切な一貫性を過剰に適用した結果であり、Emersons の婉曲表現のもう 1 つの例であるということです。
愚かな一貫性は、小さな心のホブゴブリンである。
小さな政治家、哲学者、神学者に愛されている。
関連
-
[解決済み] 1つのPostgreSQLクエリで複数のWITHステートメントを使用するには?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] varcharとnvarcharの違いは何ですか?
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み] 1つのSQL Serverステートメントはアトミックで一貫性があるか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] PostgreSQLからのPL/pgSQL出力をCSVファイルに保存する
-
[解決済み] カラム名の変更 SQL Server 2008
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み] 1つのSQL Serverステートメントはアトミックで一貫性があるか?