- - PR -
update文のデッドロックについて教えてください。
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-18 16:25
Ahfさん。
ご返答ありがとうございます。 >このUPDATE文以外に、同じテーブルAに対してSQLを実行している 箇所とかはないんでしょうか? あります。 @ テーブルAへ処理対象行へ、ロック時間・ロックユーザー・IDを UPDATEします。(ロック情報の取得) 次に、更新処理が終わったら。 A テーブルAへ更新済みフラグを立てる為、 UPDATEを行います。 UPDATE テーブルA SET 更新済フラグ = '1' WHERE ロック時間 = パラメータ.ロック時間 AND ロックユーザー = パラメータ.ロックユーザー AND ID = パラメータ.ID B @で取得したロックを解放します。 ロック時間・ロックユーザー・IDへNULLをセット UPDATE テーブルA SET ロック時間 = NULL ロックユーザー = NULL ID = NULL WHERE ロック時間 = パラメータ.ロック時間 AND ロックユーザー = パラメータ.ロックユーザー AND ID = パラメータ.ID わかりにくい説明で申しわけありませんが、 アドバイスお願いいたします。 | ||||||||
|
投稿日時: 2007-01-18 16:34
という部分は
から考えると UPDATE テーブルA SET ロック時間 = パラメータ.ロック時間, ロックユーザー = パラメータ.ロックユーザー WHERE ID = パラメータ.ID AND (その他の条件) のように「IDがWHEREに入っている」と思ってよろしいですか?「IDをUPDATE」ということなので、そうではないように思えるのですが・・ | ||||||||
|
投稿日時: 2007-01-18 17:06
shimixさん
ご返答ありがとうございます。 --------------------------------------------------------------------------- UPDATE テーブルA SET ロック時間 = パラメータ.ロック時間, ロックユーザー = パラメータ.ロックユーザー WHERE ID = パラメータ.ID AND (その他の条件) のように「IDがWHEREに入っている」と思ってよろしいですか?「IDをUPDATE」ということなので、そうではないように思えるのですが・・ --------------------------------------------------------------------------- 上記についてですが、 @の部分は、 処理対象データをロックするUPDATE文です。 UPDATE テーブルA SET ロック時間 = システム時間 ロックユーザー = 処理しているユーザー ID = 処理しているユーザーを一意に特定するID WHERE 今回対象処理対象となるデータの抽出条件 となります。 わかりにくい、説明で申し訳ありません。 | ||||||||
