- PR -

【SQL】複数テーブル検索時の整合性

投稿者投稿内容
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-06-07 11:36
引用:

mukoubutiさんの書き込み (2006-06-07 11:02) より:
> ただ問題は、mukoubutiさんって、今まで完了のフィードバックがないのよね。
→すいませんでした。ご指摘ありがとうございます。今までの質問に対し完了のフィードバックを投稿しました。


形だけのフィードバックなんぞいらんわ。
お礼じゃなくてどう解決したか書け。
JIMMY
常連さん
会議室デビュー日: 2004/10/26
投稿数: 32
お住まい・勤務地: 東京
投稿日時: 2006-06-07 13:10
mukoubutiさんの書き込み (2006-06-07 11:02) より:
引用:

→SELECT文なのでトランザクション(begin transaction commit transaction)は使っていません。


それはトランザクションの開始と終了について「ここからここまでが一つのトランザクションだよ〜」と明示的に宣言しているだけのことです。
sql一つの実行が一つのトランザクションであるという意味のコメントだと思いますよ。


引用:

> 2回の検索が1つのトランザクションで、分離レベルがダーティデータ読み出し可能になっていれば、照会機能はダーティデータを読み出して、「レコード1」は1回しか>現れないでしょう。
→仕様上ダーティーリード不可です。


どんな仕様か解りませんが、そもそも仕様に問題があるから今のあなたの質問があるのではないでしょうか?
質問されたらそれに答えるだけではなく、ちゃんとご自分で仕様がどうあるべきか、どう改善すべきなのか考えていらっやいますか?
自分の質問に質問で返されるということは、そこに問題点が潜んでいる可能性があると思ってみると良いですよ。
根本的に情報が足りないから質問するというのも多いですけどね。

そもそも、2回検索されるようなタイミングでデータの移動がなされているわけですから、その処理順自体が問題でしょう。
別スレッド間で発生する問題であれば、当然SQLの改善どうこうでは解決しない問題だと私は思います。



[ メッセージ編集済み 編集者: JIMMY 編集日時 2006-06-09 18:39 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-06-08 21:56
引用:

mukoubutiさんの書き込み(2006-06-07 11:02)より:
今までの質問に対し完了のフィードバックを投稿しました。


ありがとうございます。解決できたのかどうか、気にしている人は多いので。
でも、出来れば、何が間違えていて、どうしたから出来るようになったのかを、書いて欲しいです。それが、教えてくれた人へのフィードバックだと思うのです。

引用:

SELECT文なのでトランザクション(begin transaction commit transaction)は使っていません。
仕様上ダーティーリード不可です。


 じゃぁ、原因はそこですね。一連の処理としていないので、途中でデータが変わることがあり得るわけです。
 では、どうしましょうか?それは、「ダーティー データ」をどう定義するかに因ると思います。

 αさんが参照を、βさんが更新を、ほぼ同時に行いました。処理は時系列として、

αさんがテーブルAを参照
βさんがテーブルAから削除
αさんがテーブルBを参照
βさんがテーブルBに挿入

の順で処理されました。このとき、αさんが見ているデータは、ダーティーではないでしょうか?

 つまり、αさんが見終わるまで、他の人がデータを更新することは、禁止しなければならないのではないか?ということです。ここで、普通「ダーティー リード」はデータベースから取り出すときのことだけを指しますが、アプリケーションが使われる背景を考え、一連の業務の間にまで拡大しています。
 別の言い方をすると、「仕様」という言葉を使うのは簡単ですが、「仕様」を決めるのは、本当は難しいということです。

スキルアップ/キャリアアップ(JOB@IT)