O InnoDB detecta automaticamente o deadlock
          de transações e faz um roll back da(s) transação(ões)
          para prevenir o deadlockck. A partir da versão 4.0.5, o
          InnoDB tentará escolher pequenas
          transações para se fazer roll back. O tamanho de uma
          transação é determinado pelo número de linhas que foram
          inseridas, atualizadas ou deletadas. Antes da versão 4.0.5,
          InnoDB sempre fazia roll back da
          transação cujo pedido de bloqueio fosse o último a criar o
          deadlock, isto é, um ciclo no grafo de espera da transação.
        
          O InnoDB não pode detectar deadlocks onde
          uma trava atribuida por uma instrução MySQL LOCK
          TABLES está envolvida ou se uma trava definida em
          outro mecanismo de banco de dados diferente de
          InnoDB está envolvida. Você tem que
          resolver estas situações usando
          innodb_lock_wait_timeout configurado em
          my.cnf.
        
          Quando o InnoDB realiza um rollback
          completo de uma transação, todos as travas da transação
          são liberadas. No entanto, se é feito o rollback de apenas
          uma única instrução SQL como um resultado de um erro,
          algumas das travass definidas pela instrução podem ser
          preservadas. Isto ocorre porque o InnoDB
          armazena as travas de registro em um formato onde ele não
          pode saber qual trava foi definida por qual instrução 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.

