mysql.h


CHECK TABLE

CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED

CHECK TABLE sólo funciona con tablas MyISAM e InnoDB. En tablas MyISAM, es lo mismo que ejecutar myisamchk --medium-check table_name en la tabla.

Si no se especifica una opción, se usa MEDIUM.

Verifica la tabla o tablas buscando errores. Para tablas MyISAM, se actualiza la clave de estadísticas. El comando devuelve una tabla con las siguientes columnas:

Columna Valor
Table Nombre de tabla
Op Siempre check (verificado)
Msg_type Uno de status, error, info o warning. (Estado, error, información o aviso)
Msg_text El mensaje

Esta sentencia puede producir muchas filas de información para cada tabla verificada. La última fila será del tipo 'status' y normalmente será "OK". Si no se obtiene "OK", o la tabla está ya al día, normalmente se deberá ejecutar una reparación de la tabla. Que la tabla esté ya al día significa que el manipulador de almacenamiento para la tabla indicada no es necesario hacer una verifiación.

Existen los siguientes tipos de verificación:

Tipo Significado
QUICK No recorre las filas para verificar enlaces incorrectos.
FAST Sólo verifica tablas que no se hayan cerrado apropiadamente.
CHANGED Sólo verifica tablas que hayan sido modificadas desde la última verificación o que no se hayan cerrado apropiadamente.
MEDIUM Recorre las filas para verificar que los enlaces borrados son correctos. Esto también calcula el checksum de clave para las filas y lo compara con un checksum calculado para las claves.
EXTENDED Realiza una comprobación completa de clave para todas las claves para cada fila. Esto asegura que la tabla es consistente al 100%, pero puede requerir mucho tiempo.

Para tablas MyISAM dimensionadas dinámicamente, una comprobación siempre será MEDIUM. Para filas dimensionadas estáticamente, se salta la fila para comprobaciones QUICK y FAST ya que esas filas raramente se corrompen.

Se pueden combinar opciones de comprobación, como en el siguiente ejemplo que realiza una comprobación rápida de la tabla para ver si fue cerrada apropiadamente:

CHECK TABLE test_table FAST QUICK;

Nota: en algunos casos CHECK TABLE puede modificar la tabla. Esto ocurre su la tabla está marcada como 'corrupta' o 'no cerrada apropiadamente' pero CHECK TABLE no encontró ningún problema en la tabla. En ese caso, CHECK TABLE marcará la tabla como correcta.

Si una tabla está corrupta, entonces es más probable que el problema esté en los índices y no en la parte de datos. Todos los tipos de comprobación anteriores verifican los índices minuciosamente y encuentran la mayor parte de los errores.

Si se quiere verificar una tabla que se asume que está bien, no se debe usar una opción o usar la opción QUICK. La segunda se debe usar cuando se está en un apuro y se puede correr un pequeño riesgo de que QUICK no encuentre un error en el fichero de datos. (En la mayoría de los casos MySQL encontrará, en un uso normal, cualquier error en el fichero de datos. Si eso ocurre la tabla se marcará como 'corrupta', y en ese caso no podrá ser usada hasta que sea reparada.)

FAST y CHANGED se usan más frecuentemente desde un script (por ejemplo para ser ejecutado desde cron) si se quiere verificar una tabla de vez en cuando. En la mayoría de los casos, FAST es preferible a CHANGED. (El único caso en que no lo es, es cuando se sospecha que se ha localizado un bug en el código de MyISAM.)

EXTENDED es solo para ser usado después de que se ha ejecutado una comprobación normal y aún se obtienen errores extraños desde una tabla cuando MySQL intenta actualizar o encontrar una fila por una clave (esto es muy probable si se ha realizado una comprobación normal).

Algunos problemas detectados por CHECK TABLE no pueden ser corregidos de forma automática:

  • Si se encuentra una fila donde una columna auto_increment tiene valor 0. (Eso es posible asignando esplícitamente 0 a la columna AUTO_INCREMENT al crear la fila con una sentencia UPDATE.) Esto no es un error en sí mismo, pero puede causar problemas si se decide volcar la tabla y restaurarla o hacer un ALTER TABLE en la tabla. En ese caso, la columna AUTO_INCREMENT cambiará de valor, de acuerdo con las reglas de las columnas AUTO_INCREMENT, lo cual puede causar problemas del tipo de error de clave duplicada. Para librarse del aviso bastará con ejecutar una sentencia UPDATE para asignar a la columna un valor distinto de cero.