重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

もともとMicrosoft SQLで使用していたアプリケーションを多少改造し、MySQLにしようと思っています。

データ型もコマンドもすべて一致しているし、と思って構築をしていたら一つ見落としていたことがありました。
排他的ロックです。

MySQLで排他的ロックってどうやってやればいいのでしょう?

ちなみに今はこのコマンドをどうすればMySQLで動くのか迷い中です。

SET LOCK_TIMEOUT 1000//ロックのタイムアウトを設定
SELECT * FROM # WITH(XLOCK) WHERE $//排他的ロック

A 回答 (2件)

ロックはコチラ。


http://dev.mysql.com/doc/refman/4.1/ja/innodb-lo …
http://www.buena-idea.net/~hironobu/mysql/m-2-10 …

コマンドでのタイムアウト設定はないと思います(あったらゴメンナサイ)
http://dev.mysql.com/doc/refman/4.1/ja/innodb-st …
    • good
    • 0
この回答へのお礼

ありがとうごさいます。

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

勉強になりました。

お礼日時:2007/01/09 00:00

排他制御は標準SQLで詳しく規定されている訳でもなく、各RDBMSにより実装方法はバラバラであり、まったく同じように実現できるとも限りません。


SQL ServerのようにSQL中にヒントとして記述する方式もあれば、MySQLのように使用するストレージエンジンやset transaction、select文のfor updateの組み合わせなどで実装しているものもあります。

上記のようなキーワードで、マニュアルを参照してみてください。
    • good
    • 0
この回答へのお礼

for updateで実現できました。

inno dbでかつ主キー等設定する必要はあるようですが。

ちなみにfor updateをかけたとき排他的ロックは明示しなくても
UPDATEコマンドを発行したときに排他的ロックの解除ができるのでしょうか?
(コマンドを投げてみてそういうような動きをしているように感じたので)

ありがとうございました。

お礼日時:2007/01/09 00:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!