Sintaxe de CHECK TABLE
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. Leia "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 MariaDB 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 MariaDB tenta atualizar um registro ou encontrar um registro pela chave (isto seria muito difícil ocorrer caso uma conferência normal tenha executado corretamente!).
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çãoUPDATE
).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.