- ベストアンサー
排他的ロック
もともとMicrosoft SQLで使用していたアプリケーションを多少改造し、MySQLにしようと思っています。 データ型もコマンドもすべて一致しているし、と思って構築をしていたら一つ見落としていたことがありました。 排他的ロックです。 MySQLで排他的ロックってどうやってやればいいのでしょう? ちなみに今はこのコマンドをどうすればMySQLで動くのか迷い中です。 SET LOCK_TIMEOUT 1000//ロックのタイムアウトを設定 SELECT * FROM # WITH(XLOCK) WHERE $//排他的ロック
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ロックはコチラ。 http://dev.mysql.com/doc/refman/4.1/ja/innodb-locking-reads.html http://www.buena-idea.net/~hironobu/mysql/m-2-10.html コマンドでのタイムアウト設定はないと思います(あったらゴメンナサイ) http://dev.mysql.com/doc/refman/4.1/ja/innodb-start.html
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
排他制御は標準SQLで詳しく規定されている訳でもなく、各RDBMSにより実装方法はバラバラであり、まったく同じように実現できるとも限りません。 SQL ServerのようにSQL中にヒントとして記述する方式もあれば、MySQLのように使用するストレージエンジンやset transaction、select文のfor updateの組み合わせなどで実装しているものもあります。 上記のようなキーワードで、マニュアルを参照してみてください。
お礼
for updateで実現できました。 inno dbでかつ主キー等設定する必要はあるようですが。 ちなみにfor updateをかけたとき排他的ロックは明示しなくても UPDATEコマンドを発行したときに排他的ロックの解除ができるのでしょうか? (コマンドを投げてみてそういうような動きをしているように感じたので) ありがとうございました。
お礼
ありがとうごさいます。 SELECTのFOR UPDATEで排他的ロックできるんですね。 (主キーの設定はいるようですが) タイムアウトの設定はやはりないようですね。 (自分でポーリングして見るしかないようですね) 勉強になりました。