SQL-92 のトランザクション分離レベルに関する
          InnoDB のデフォルトは
          REPEATABLE READ です。 バージョン
          4.0.5 より、InnoDB は SQL-92
          標準で記述されている 4
          種類のトランザクション分離レベルをすべて提供するようになりました。
          my.cnf の [mysqld]
          セクションで、すべての接続に対するデフォルトの分離レベルを設定できます。
        
transaction-isolation = {READ-UNCOMMITTED | READ-COMMITTED
                         | REPEATABLE-READ | SERIALIZABLE}
          ユーザは、単一セッションの分離レベルまたは新たに接続するすべてのコネクションの分離レベルを、SET
          TRANSACTION
          ステートメントで変更できます。その構文は次のとおりです。
        
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL
                       {READ UNCOMMITTED | READ COMMITTED
                        | REPEATABLE READ | SERIALIZABLE}
SQL 構文ではレベル名にハイフンを付けないことに注意してください。
          デフォルトの動作として、次の(まだ開始されていない)トランザクションの分離レベルが設定されます。このステートメントに
          GLOBAL
          キーワードを使用すると、それ以降に作成されるすべての新しい接続(既存の接続は対象外)に対してグローバルにデフォルトのトランザクションレベルが設定されます。
          これを行うには、SUPER
          特権が必要です。SESSION
          キーワードを使用すると、現在の接続で実行されるすべての新しいトランザクションに対してデフォルトのトランザクションレベルが設定されます。どのクライアントも、自由にセッション分離レベル(トランザクションの途中であっても)または次のトランザクションの分離レベルを変更できます。
          3.23.50
          より前のバージョンでは、InnoDB
          テーブルに SET TRANSACTION
          が作用しませんでした。4.0.5
          より前のバージョンでは、REPEATABLE
          READ と SERIALIZABLE
          のみが提供されていました。
        
グローバルおよびセッションのトランザクション分離レベルは、次のステートメントで確認できます。
SELECT @@global.tx_isolation; SELECT @@tx_isolation;
          行レベルロックでは、InnoDB
          がネクストキーロックを使用します。
          つまり、インデックスレコードに加えてインデックスレコードの前の
          ``ギャップ''
          もロックすることで、他のユーザがそのインデックスレコードの直前に挿入できないようにします。ここでいうネクストキーロックとは、インデックスレコードとその前のギャップをロックするロックのことです。
          ギャップロックとは、あるインデックスレコードの前のギャップのみをロックするロックです。
        
          InnoDB
          における各分離レベルの詳細は次のとおりです。
        
              READ UNCOMMITTED
              ``ダーティリード''
              とも呼ばれる。ロックを取得しない
              SELECT
              ステートメントが実行されるため、前のバージョンのレコードが参照されない。
              したがって、この分離レベルでは
              '一貫した' 読み取りにならない。
              それ以外の場合、このレベルは READ
              COMMITTED と同じように機能する。
            
              READ COMMITTED Oracle
              にやや近い分離レベル。 全ての
              SELECT ... FOR UPDATE および
              SELECT ... LOCK IN SHARE MODE
              ステートメントは、インデックスレコードのみをロックし、その前のギャップはロックしない。したがって、ロックされたレコードの次に新しいレコードを自由に挿入できる。
              一意の検索条件でユニークインデックスを使用する
              UPDATE および
              DELETE
              は、検出したインデックスレコードのみをロックし、その前のギャップはロックしない。
              ただし、範囲指定のある
              UPDATE および
              DELETE
              では、InnoDB
              が引き続きネクストキーロックまたはギャップロックを設定し、その範囲でカバーされるギャップへ他のユーザが挿入できないようにする必要がある。これは、MySQL
              のレプリケーションおよびリカバリが機能するように、``ファントム(幻像)行''
              をブロックしなければならないからである。
              一貫性読み取りは、Oracle
              と同じように動作する。つまり、一貫性読み取りでは、同じトランザクション内であっても、最新のスナップショットが独自に設定され、読み取られる。
            
              REPEATABLE READ
              InnoDB
              のデフォルトの分離レベル。 SELECT
              ... FOR UPDATE, SELECT ... LOCK IN
              SHARE MODE,
              一意の検索条件でユニークインデックスを使用する
              UPDATE および
              DELETE
              は、検出したインデックスレコードのみをロックし、その前のギャップはロックしない。
              それ以外の場合は、これらの操作でネクストキーロック(次のキーでスキャンされるインデックスの範囲をロック)またはギャップロックが使用され、他のユーザによる新たな挿入がブロックされる。
              読み取り一貫性には、前の分離レベルとの間に重要な違いがある。このレベルでは、同じトランザクション内のすべての一貫した読み取りが、最初の読み取りで確立されたスナップショットを読み取る。この規則によって、同じトランザクション内で複数の単純な
              SELECT
              ステートメントを発行した場合に、それらの
              SELECT
              ステートメントも互いに一貫した状態になる。
            
              SERIALIZABLE
              前の分離レベルに似ているが、単純な
              SELECT
              ステートメントがすべて暗黙的に
              SELECT ... LOCK IN SHARE MODE
              に変換される。
            
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

