The world's most popular open source database
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.

