CHECK TABLE nome_tabela[,nome_tabela...] [opção [opção...]] opção = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE
funciona somente em tabelas
MyISAM
. Em tabelas MyISAM
é a mesma coisa que executar myisamchk --medium-check
nome_tabela
na tabela.
Se você não especificar nenhuma opção,
MEDIUM
é usado.
Verifica se existem erros na(s) tabela(s). Para as tabelas
MyISAM
as estatísticas das chaves são
atualizadas. O comando retorna uma tabela com as seguintes
colunas:
Coluna | Valor |
Table | Nome da Tabela. |
Op | Sempre check
|
Msg_type | Um dos seguintes: status , error ,
info , or warning
|
Msg_text | A mensagem |
Note que a instrução pode produzir várias linhas de
informações para cada tabela conferida. A última linha irá
ser do tipo Msg_type status
e normalmente
deve estar OK
. Se você não obteve
OK
ou Not checked
, deve
ser executado, normalmente, um reparo da tabela. See
Secção 4.5.6, “Utilizando myisamchk
para Manutenção de Tabelas e
Recuperação em Caso de Falhas”. Table is already
up to date
significa que o gerenciador de
armazenamento para a tabela indica que não há necessidade de
verificar a tabela.
Os diferentes tipos de consistências são as seguintes:
Tipo | Significado |
QUICK |
Não busca os registros verificando ligações incorretas. |
FAST |
Só confere tabelas que não foram fechadas corretamente. |
CHANGED |
Só verifica as tabelas que foram alteradas desde a última conferência ou que não foram fechadas corretamente. |
MEDIUM |
Busca os registros para verificanado que ligações removidas estão ok. Isto também calcula uma chave de conferência para os registros e verifica isto com um checksum calculado para as chaves. |
EXTENDED |
Faz uma busca completa nas chaves para todas as chaves em cada registro. Isto assegura que a tabela está 100% consistente, mas pode demorar muito tempo para executar! |
Para tabelas MyISAM
de tamanho dinâmico, uma
verificação iniciada sempre fará uma verificação
MEDIUM
. Para registros de tamanho estático
nós saltamos a busca de registros para QUICK
e FAST
já que os registros estão raramente
corrompidos.
Você pode combinar opções de consistência como no exemplo a seguir que faz uma verificação rápida na tabela para ve se ela foi fechada corretamente:
CHECK TABLE test_table FAST QUICK;
NOTA: em alguns casos
CHECK TABLE
irá alterar a tabela! Isto
acontece se a tabela estiver marcada como 'corrupted'
(corrompida) ou 'not closed properly' (não foi fechada
corretamente) mas o CHECK TABLE
não
encontrar não encontrar nenhum problema na tabela. Neste caso,
CHECK TABLE
irá marcar a tabela como ok.
Se uma tabela estiver corrompida, é preferível que seja um problema nos índices e não na parte de dados. Todos os tipos de consistência acima sempre confere os índices e deve então encontrar a maioria dos erros.
Se você só quiser conferir uma tabela que acredita estar ok,
você não deve utilizar nenhuma opção para o comando check ou
utilizar a opção QUICK
. O último deve ser
utilizado quando você estiver com pressa e o rísco do
QUICK
não encontrar um erro no arquivo de
dados for mínimo (Na maioria dos casos o MySQL pode encontrar,
sob utilização normal, qualquer erro no arquivo de dados. Se
isto ocorrer, então a tabela será marcada como 'corrupted',
neste caso a tabela não poderá ser utilizada até ser
reparada).
FAST
e CHANGED
são
normalmente chamados a partir de um script (um exemplo é ser
executado a partir do cron) Se você desejar conferir suas
tabelas de tempos em tempos. Na maioria dos casos, o
FAT
é uma opção melhor que
CHANGED
. (O único caso em que isto não
acontece é quando você suspeita que encontrou um bug no
código do MyISAM
.).
EXTENDED
deve ser utilizado somente depois de
ter executado um check normalmente, mas continuar obtendo erros
de uma tabela quando o MySQL tenta atualizar um registro ou
encontrar um registro pela chave (isto seria muito difícil
ocorrer caso uma conferência normal tenha executado com
sucesso!).
Alguns problemas relatados por CHECK TABLE
,
não podem ser corrigidas automaticamente:
Found row where the auto_increment column has the
value 0
.
Isto significa que você possui um registro na tabela onde o
campo índice que utiliza o recurso
auto_increment
contem o valor 0. (É
possível criar um registro onde a coluna de auto incremento
seja 0 definindo explicitamente 0 em uma instrução
UPDATE
).
Isto não é exatamente um erro, mas pode causar problemas
se você decidir descarregar a tabela e restaurá-la ou
executar um ALTER TABLE
na tabela. Neste
caso a coluna de auto incremento irá alterar seu valor, de
acordo com as regras das colunas de auto incremento, que
pode causar problemas como um erro de chave duplicada.
Para se livrar do alerta, basta executar uma instrução
UPDATE
para configurar a coluna para
algum outro valor diferente de 0.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.