• 締切済み

MysqlでのLOCK処理

Mysqlのwebリファレンスの http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.htmlでは --->個々の UPDATE ステートメントでは、いずれも処理が原子的に行われるため、通常、テーブルをロックする必要はありません。現在実行中の SQL ステートメントが、他のスレッドによって妨害されることはまったくありません。しかし、次に示すように、テーブルをロックする必要が生じる場合もいくつかあります。 トランザクションをサポートしていないストレージエンジンを MySQL で使用している場合、SELECT と UPDATE の間に他のスレッドに割り込まれないようにするには、LOCK TABLES を使用する必要がある。次の例では、安全に処理を実行するために LOCK TABLES を発行する必要がある。<--- と説明がありますが、 (1)トランザクションをサポートしていないストレージエンジンでINSERT INTO,DELETE処理をするにはLOCKが必要になってくるのでしょうか? よろしくご教授おねがいします

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

必須ではありません。 要するに、selectをしてからupdateするようなルーチンにした場合、間に元のデータを他の人に更新されたら具合が悪いときにLOCKをしたほうがいいですよ、と言うことです。 select id from table; # <-自分 update table set id = 5 where id = 1; # <-他人 update table set id = 3 where id = 1; # <-自分 とされた場合結果が思い通りに行かないですよねという意味で。 真中の処理がdelete等も同様です。 insertは関係ないですが。

ahirusanmm
質問者

補足

ご返答ありがとうございます。 補足的な質問ですが、DELETEやINSERT INTOも原始的に処理が行われると理解してもいいのでしょうか?