【ロック】各SQLステートメントが取るロックの種類 - notee/MySQL GitHub Wiki

ここからの抜粋。 ftp://ftp.ntu.edu.tw/MySQL/doc/refman/5.1-olh/ja/innodb-locks-set.html

SELECT ... FROM

一貫性読み取りであり、データベースのスナップショットを読み取り、トランザクションの遮断レベルが SERIALIZABLE に設定されなければロックは設定しません。SERIALIZABLE レベルの場合、検索時に直面したインデックスレコード上に共有ネクストキーロックが設定されます。

SELECT ... FROM ... LOCK IN SHARE MODE

その検索時に直面したすべてのインデックスレコード上に共有ネクストキーロックが設定されます。

SELECT ... FROM ... FOR UPDATE

検索で特定されたインデックスレコードに対し、ほかのセッションが SELECT ... FROM ... LOCK IN SHARE MODE を実行したり、特定のトランザクション遮断レベルで読み取りを行ったりできないようにします。一貫性読み取りでは、読み取られたビュー内に存在するレコードに設定されたロックはすべて無視されます。

UPDATE ... WHERE ...

検索が直面するすべてのレコード上に排他ネクストキーロックを設定します。

DELETE FROM ... WHERE ...

検索が直面するすべてのレコード上に排他ネクストキーロックを設定します。

INSERT

挿入される行に排他ロックを設定します。このロックはネクストキーロックではなくインデックスレコードロックである (つまりギャップロックが存在しない) ため、ほかのセッションは挿入行の前にあるギャップへの挿入を自由に行えます。