El tratamiento de errores en InnoDB no siempre es como
se especifica en el estándar SQL. De acuerdo a éste, cualquier error
durante la ejecución de una sentencia SQL debería ocasionar su
cancelación. InnoDB a veces sólo cancela una parte de
la sentencia, o la transacción completa. Los siguientes puntos describen
cómo InnoDB lleva a cabo el tratamiento de errores:
Si el espacio de tablas agota su espacio disponible en disco, se
obtiene el error de MySQL Table is full (La tabla
está llena) e InnoDB cancela la sentencia SQL.
Un interbloqueo (deadlock) en una transacción o un exceso de espera
(timeout) en una espera por bloqueo provocan que
InnoDB cancele la transacción completa.
Un error de clave duplicada cancelará la sentencia SQL, si ésta no
contiene la opción IGNORE.
Un error row too long error (registro demasiado
largo) cancela la sentencia SQL.
Los demás errores son, en su mayoría, detectados por la capa de código
MySQL (por encima del nivel del motor de almacenamiento
InnoDB) y causarán la cancelación de la
correspondiente sentencia SQL. Los bloqueos no se liberan al cancelar
una única sentencia SQL.
Durante una cancelación implícita, así como durante la ejecución de un
comando SQL ROLLBACK explícito, SHOW
PROCESSLIST muestra Rolling back en la
columna State de la conexión afectada.
É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.
