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.