CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
Chequea una tabla o tablas para errores. CHECK
TABLE
funciona para tablas MyISAM
y InnoDB
. Para tablas
MyISAM
, la estadística de clave se
actualiza.
Desde MySQL 5.0.2, CHECK TABLE
puede
comprobar las vistas en busca de problemas tales como tablas
que se referencian en la definición de la vista que ya no
existe.
El comando CHECK TABLE
retorna una tabla
con las siguientes columnas:
Columna | Valor |
Tabla |
Nombre de tabla |
Op |
Siempre check
|
Msg_type |
Es status , error ,
info , o warning
|
Msg_text |
Mensaje |
Tenga en cuenta que el comando puede producir varios registros
para información de cada tabla chequeada. El último registro
tiene un valor Msg_type
de
status
y Msg_text
normalmente debe ser OK
. Si no obtiene
OK
, o Table is already up to
date
debe realizar una reparación de la tabla.
Consulte Sección 5.8.3, “Mantenimiento de tablas y recuperación de un fallo catastrófico
(crash)”. Table
is already up to date
significa que el motor de
almacenamiento para la tabla indicada indica que no hay
necesidad de chequear la tabla.
Las distintas opciones de chequeo que pueden darse se muestran
en la siguiente tabla. Estas opciones se aplican sólo para
tablas MyISAM
y se ignoran en tablas
InnoDB
y vistas.
Tipo | Significado |
QUICK |
No escanea los registros para chequear enlaces incorrectos. |
FAST |
Sólo chequea tablas que no se han cerrado correctamente. |
CHANGED |
Sólo las tablas chequeadas que se han cambiado desde el úlitmo chequeo o no se han cerrado correctamente. |
MEDIUM |
Escanea registros para verificar que los enlaces borrados están bien. También calcula el checksum de la clave para los registros y lo verifica con el checksum calculado para las claves. |
EXTENDED |
Realiza una búsqueda completa para todas las claves para cada registro. Se asegura que la tabla es consistente 100%, pero tarda mucho tiempo! |
Si ninguna de las opciones QUICK
,
MEDIUM
, o EXTENDED
se
especifica, el tipo de chequeo por defecto para tablas de
formato dinámico MyISAM
es
MEDIUM
. Esto es lo mismo que ejecutar
myisamchk --medium-check
tbl_name
en la tabla. El
tipo de chequeo por defecto también es
MEDIUM
para tablas
MyISAM
de formato estático, a no ser que
se especifique CHANGED
o
FAST
. En tal caso, por defecto es
QUICK
. El escaneo de registro se evita para
CHANGED
y FAST
porque
los registros están corruptos muy raramente.
Puede combinar opciones de chequeo, como en el siguiente ejemplo, que realiza un chequeo rápido de la tabla para ver si se cerró correctamente:
CHECK TABLE test_table FAST QUICK;
Nota: En algunos casos,
CHECK TABLE
cambia la tabla. Esto ocurre si
la tabla se marca como “corrupted” o “not
closed properly” pero CHECK TABLE
no
encuentra ningún problema en la tabla. En este caso,
CHECK TABLE
marca la tabla como correcta.
Si una tabla está corrupta, es más probable que el problema esté en el índice y no en la parte de datos. Todos los tipos de chequeo chequean los índices profundamente y deberían encontrar la mayoría de errores.
Si quiere chequear una tabla que asume como correcta, no debe
usar opciones de chequeo o la opción
QUICK
. Ésta debe usarse cuando tiene prisa
y puede permitirse el pequeño riesgo que
QUICK
no encuentre un error en el fichero
de datos. (En la mayoría de casos, MySQL debería encontrar,
bajo uso normal, cualquier error en el fichero de datos. Si
esto ocurre, la tabla se marca como “corrupted” y
no puede usarse hasta que se repare.)
FAST
y CHANGED
están
pensados para usar desde un script (por ejemplo, para
ejecutarse desde cron) si quiere chequear
sus tablas de vez en cuando. En la mayoría de casos,
FAST
se prefiere en lugar de
CHANGED
. (El único caso en que no es el
método preferido es cuando sospecha que ha encontrado un bug
en el código MyISAM
.)
EXTENDED
debe usarse sólo después de
ejecutar un chequeo normal pero todavía obtiene errores
extraños de la tabla cuando MySQL intenta actualizar un
registro o encuentra un registro mediante la clave. (Esto es
muy improbable si un chequeo normal ha tenido éxito.)
Algunos problemas reportados por CHECK
TABLE
no pueden corregirse automáticamente:
Found row where the auto_increment column has the
value 0
.
Esto significa que tiene un registro en la tabla donde la
columna AUTO_INCREMENT
contiene un
valor de índice de 0. (Es posible crear un registro donde
la columna AUTO_INCREMENT
es 0 poneindo
la columna explícitamente a 0 con un comando
UPDATE
.)
Esto no es un error por si mismo, pero puede causar
problemas si decide volcar la tabla y restaurarla o
realizar un ALTER TABLE
en la tabla. En
este caso, la columna AUTO_INCREMENT
cambia los valores según las reglas de las columnas
AUTO_INCREMENT
, que pueden causar
problemas tales como errores de clave duplicada.
Para evitar las advertencias, símplemente ejecute un
comando UPDATE
para poner en la columna
un valor distinto a 0.
É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.