- - PR -
【SQL】複数テーブル検索時の整合性
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-07 11:36
形だけのフィードバックなんぞいらんわ。 お礼じゃなくてどう解決したか書け。 | ||||||||
|
投稿日時: 2006-06-07 13:10
mukoubutiさんの書き込み (2006-06-07 11:02) より:
それはトランザクションの開始と終了について「ここからここまでが一つのトランザクションだよ〜」と明示的に宣言しているだけのことです。 sql一つの実行が一つのトランザクションであるという意味のコメントだと思いますよ。
どんな仕様か解りませんが、そもそも仕様に問題があるから今のあなたの質問があるのではないでしょうか? 質問されたらそれに答えるだけではなく、ちゃんとご自分で仕様がどうあるべきか、どう改善すべきなのか考えていらっやいますか? 自分の質問に質問で返されるということは、そこに問題点が潜んでいる可能性があると思ってみると良いですよ。 根本的に情報が足りないから質問するというのも多いですけどね。 そもそも、2回検索されるようなタイミングでデータの移動がなされているわけですから、その処理順自体が問題でしょう。 別スレッド間で発生する問題であれば、当然SQLの改善どうこうでは解決しない問題だと私は思います。 [ メッセージ編集済み 編集者: JIMMY 編集日時 2006-06-09 18:39 ] | ||||||||
|
投稿日時: 2006-06-08 21:56
ありがとうございます。解決できたのかどうか、気にしている人は多いので。 でも、出来れば、何が間違えていて、どうしたから出来るようになったのかを、書いて欲しいです。それが、教えてくれた人へのフィードバックだと思うのです。
じゃぁ、原因はそこですね。一連の処理としていないので、途中でデータが変わることがあり得るわけです。 では、どうしましょうか?それは、「ダーティー データ」をどう定義するかに因ると思います。 αさんが参照を、βさんが更新を、ほぼ同時に行いました。処理は時系列として、 αさんがテーブルAを参照 βさんがテーブルAから削除 αさんがテーブルBを参照 βさんがテーブルBに挿入 の順で処理されました。このとき、αさんが見ているデータは、ダーティーではないでしょうか? つまり、αさんが見終わるまで、他の人がデータを更新することは、禁止しなければならないのではないか?ということです。ここで、普通「ダーティー リード」はデータベースから取り出すときのことだけを指しますが、アプリケーションが使われる背景を考え、一連の業務の間にまで拡大しています。 別の言い方をすると、「仕様」という言葉を使うのは簡単ですが、「仕様」を決めるのは、本当は難しいということです。 |