select ... for update; select ... lock in share mode; の違いがよくわからなかった。 データを更新する時に必要なロックは、for update データを参照する時に必要なロックは、share mode と体感的に理解できるのだが、どちらのロックを取ったときも、他の誰もデータを更新、削除できない。 また、どちらのロックも、(for update していたら、他から参照できないのかと思いきや)他の誰からも参照は可能。 ん?となると、この2つのロック、何がどう違うの?? その答えは ここ に書いてあった。(リンク先はPostgresだが、MySQLでも同じこと) 共有ロックとは、排他ロック(更新、削除、FOR UPDATE)をブロックする/される一方、共有ロック同士では互いにブロックしないというものです。 なるほど、share mode はセマ