• ベストアンサー

排他的ロック

もともとMicrosoft SQLで使用していたアプリケーションを多少改造し、MySQLにしようと思っています。 データ型もコマンドもすべて一致しているし、と思って構築をしていたら一つ見落としていたことがありました。 排他的ロックです。 MySQLで排他的ロックってどうやってやればいいのでしょう? ちなみに今はこのコマンドをどうすればMySQLで動くのか迷い中です。 SET LOCK_TIMEOUT 1000//ロックのタイムアウトを設定 SELECT * FROM # WITH(XLOCK) WHERE $//排他的ロック

質問者が選んだベストアンサー

  • ベストアンサー
  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.1

ロックはコチラ。 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

maronii_now
質問者

お礼

ありがとうごさいます。 SELECTのFOR UPDATEで排他的ロックできるんですね。 (主キーの設定はいるようですが) タイムアウトの設定はやはりないようですね。 (自分でポーリングして見るしかないようですね) 勉強になりました。

その他の回答 (1)

回答No.2

排他制御は標準SQLで詳しく規定されている訳でもなく、各RDBMSにより実装方法はバラバラであり、まったく同じように実現できるとも限りません。 SQL ServerのようにSQL中にヒントとして記述する方式もあれば、MySQLのように使用するストレージエンジンやset transaction、select文のfor updateの組み合わせなどで実装しているものもあります。 上記のようなキーワードで、マニュアルを参照してみてください。

maronii_now
質問者

お礼

for updateで実現できました。 inno dbでかつ主キー等設定する必要はあるようですが。 ちなみにfor updateをかけたとき排他的ロックは明示しなくても UPDATEコマンドを発行したときに排他的ロックの解除ができるのでしょうか? (コマンドを投げてみてそういうような動きをしているように感じたので) ありがとうございました。

関連するQ&A