2010-11-23 4 views
3

SQLコマンドを使用して2つの異なるテーブルを更新するプログラムを作成しようとしています。私が心配している唯一の事は、プログラムがテーブルの1つを更新してから接続が失われた場合でも、他のテーブルを更新しないと問題が発生する可能性があるということです。正確に同じ時間で私はSQL多命令アトミック性質問

A.がそれらを更新できいずれかの方法

または

B.は、第1に障害が発生した場合は、最初の更新を元に戻しますがあります。

+1

「取引」に関する情報を探していると思います。特定のデータベース(タグで指定していないもの)でのトランザクションの使用に関する情報を探します。 – Kendrick

+0

問題のエラー/例外メッセージは何ですか? –

+1

トランザクションを使用している場合は、その両方を行うか、どちらも実行しません。最初の更新をロールバックする必要はありません。 –

答えて

1

ほとんどのSQL Serverはトランザクションをサポートしています。つまり、一連のアクションをキューに入れて、それらを原子的に実行することです。これを行うには、次のようなクエリをラップ:

START TRANSACTION; 
*do stuff* 
COMMIT; 

は、あなたがそれをサポートしているどのような追加機能の詳細については、サーバーのマニュアルを参照してくださいすることができます。たとえば、MySQLのトランザクションのhere is a more detailed discussionです。

2

データベースによっては、関連する操作に基づいてストアドプロシージャまたは関数を使用することをお勧めします。それが起こるか、それはdoesnの - これらは本質的にアトミック(データベーストランザクションをカプセル化する

  • MySQLの
  • オラクル
  • SQL Serverの
  • PostgreSQLの

を:彼らはによってサポートされていますデータベース上にすでに存在しているので、クエリはパラメータ化されています(SQLインジェクション攻撃から安全です)。つまり、送信されるデータ量が少なくなります。つまり、のみパラメータ値