- 締切済み
行ロックについて
Web上のボタンをクリックしたとき 該当データを1件取得しそのデータにフラグをたてる ⇒フラグを管理するテーブルに投入する という処理をしており該当データは一人につき1件取得したいです。 BEGIN SELECT * FROM TABLE1 WHERE day = 今日 ORDER BY time LIMIT 1 FOR UPDATE UPDATE TABLE1 SET flag = 1 WHERE id = $id INSERT INTO TABLE2 (time , flag ) VALUES ($time , 1); COMMIT 現在の問題は同時にボタンを押したとき SELECTで取得したデータが重複してしまうことがあることです。 BEGINからCOMMITまでを一連の流れとし、 その間はSELECTもできないようにしたいです。 ドキュメントに FOR UPDATEだとUPDATE、DELETE、SELECT FOR UPDATEは拒否されます とありますのでSELECTは通ると解釈するとFOR UPDATEでは実現できないのでしょうか? テーブルのロックではなく行のロックで実現したいのですが どなたかご教授お願い致します。 ※バージョンはPostgreSQL 8.1.18 です。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- lupin-333333
- ベストアンサー率31% (294/933)
つりっぽいですね。 ネットで検索すると、すぐでてくる。なんでしょうね http://search.yahoo.co.jp/search?p=%22PostgreSQL%22+%22%E8%A1%8C%E3%83%AD%E3%83%83%E3%82%AF%22&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt http://www.fireproject.jp/feature/postgresql/sql-intro/transaction-lock.html だいたい知らない人が「行ロック」なんて単語でてくろだろうか?
補足
言葉が足りなかったようで申し訳ありません。 現在ロックについて勉強中です。検索など調べた上でやってみたのですが、思うように動作しないため質問しております。 つりと言われびっくりしています。