[解決済み] 読み取りトランザクションをコミットまたはロールバックすべきですか?
2022-12-24 08:59:58
質問
分離レベルを指定できるように、トランザクション内で実行する読み取りクエリを持っています。 クエリが完了したら、どうすればよいですか。
- トランザクションをコミットします。
- トランザクションのロールバック
- 何もしない(usingブロックの終了時にトランザクションをロールバックすることになる)
それぞれを実行することの意味は何ですか?
using (IDbConnection connection = ConnectionFactory.CreateConnection())
{
using (IDbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadUncommitted))
{
using (IDbCommand command = connection.CreateCommand())
{
command.Transaction = transaction;
command.CommandText = "SELECT * FROM SomeTable";
using (IDataReader reader = command.ExecuteReader())
{
// Read the results
}
}
// To commit, or not to commit?
}
}
EDIT: 問題は、トランザクションを使用すべきかどうか、あるいはトランザクションレベルを設定する他の方法があるかどうかということではありません。 問題は、何も変更しないトランザクションがコミットまたはロールバックされることに何か違いがあるかということです。 パフォーマンスに違いがあるのでしょうか? 他の接続に影響しますか? その他の違いはありますか?
どのように解決するのですか?
コミットする。ピリオドを打つ。他に賢明な選択肢はありません。もしトランザクションを開始したのであれば、それを閉じるべきです。コミットすると持っていたロックが解放されますし、ReadUncommittedやSerializableの分離レベルでも同様に賢明です。暗黙のロールバックに頼ることは - おそらく技術的には同等ですが - 単に貧しいフォームです。
もしこれで納得がいかないのであれば、あなたのコードの途中で update 文を挿入し、暗黙のロールバックが発生してデータを削除するのを追跡しなければならない次の人を想像してみてください。
関連
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] T-SQL文の接頭辞Nの意味と使うべきタイミングは?
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み] トランザクションの分離レベルとテーブルのロックの関係
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
plsql-stored-procedure ORA-06550 エラー処理
-
[解決済み] SQL Server FOR EACH ループ
-
[解決済み] 1つのPostgreSQLクエリで複数のWITHステートメントを使用するには?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL Serverでシングルクォートをエスケープするにはどうすればよいですか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する