InnoDB detecta automáticamente un deadlock
        de transacciones y cancela una o más transacciones para
        evitarlo. InnoDB intenta escoger para
        cancelar transacciones pequeñas, el tamaño de la transacción
        es determinado por el número de filas insertadas, actualizadas,
        o eliminadas.
      
        InnoDB se mantiene al tanto de los bloqueos
        de tablas si innodb_table_locks=1 (1 es el
        valor predeterminado), y la capa MySQL por debajo sabe acerca de
        bloqueos a nivel de fila. En otro caso,
        InnoDB no puede detectar deadlocks cuando
        están involucrados un bloqueo de tabla establecido por una
        sentencia LOCK TABLES o por otro motor de
        almacenamiento que no sea InnoDB. Estas
        situaciones se deben resolver estableciendo el valor de la
        variable de sistema innodb_lock_wait_timeout.
      
        Cuando InnoDB lleva a cabo una cancelación
        completa de una transacción, todos los bloqueos de la
        transacción son liberados. Sin embargo, si solamente se cancela
        como resultado de un error una sentencia SQL individual, algunos
        de los bloqueos impuestos por la sentencia SQL podrían
        mantenerse. Esto se debe a que InnoDB guarda
        los bloqueos de fila en un formato en el que no puede luego
        saber qué sentencia SQL originó cada bloqueo.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

