InnoDB
          は、トランザクションのデッドロックを自動的に検出し、そのトランザクションをロールバックしてデッドロックを回避します。バージョン
          4.0.5 より、InnoDB
          は小さいほうのトランザクションを選択してロールバックするようになります。トランザクションのサイズは、挿入、更新、または削除したレコードの数によって決定されます。
          4.0.5 より前のバージョンの InnoDB
          では、デッドロックを引き起こすロックを要求したトランザクションを、常にロールバックしていました。
        
          InnoDB は、MySQL の LOCK
          TABLES
          ステートメントが設定したロックが関係するデッドロック、または
          InnoDB
          以外のストレージエンジンで設定されたロックが関係するデッドロックを検出できません。これらの状況は、my.cnf
          で設定する innodb_lock_wait_timeout
          を使って解決する必要があります。
        
          InnoDB
          がトランザクションの完全なロールバックを実行すると、そのトランザクションのすべてのロックが解除されます。ところが、エラーのために単一の
          SQL
          ステートメントのみがロールバックされると、SQL
          が設定したロックの一部が保持される場合があります。これは、InnoDB
          が使用する行ロックの格納形式では、ロックを設定した
          SQL
          ステートメントを後から特定できないためです。
        
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.

