CHECK TABLE tbl_name[,tbl_name...] [option [option...]] option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE
работает только на таблицах MyISAM
и InnoDB
. На таблицах типа
MyISAM
команда эквивалентна запуску на таблице myisamchk -m table_name
.
Если опция не указана, используется MEDIUM
.
Проверяет таблицу(ы) на наличие ошибок. Для таблиц MyISAM
обновляется
статистика ключей. Команда возвращает таблицу со следующими столбцами:
Столбец | Значение |
Table | Имя таблицы. |
Op | Всегда ``check''. |
Msg_type | Одно из значений status , error , info , или warning .
|
Msg_text | Само сообщение. |
Заметим, что по каждой проверяемой таблице может быть выдано много строк
информации. Последняя строка будет представлять Msg_type status
и, как
правило, должна содержать OK
. Если выдается что-либо отличное от
OK
и Not checked
, то обычно следует провести ремонт таблицы
(see Раздел 4.4.6, «Использование myisamchk
для профилактики таблиц и послеаварийного»). Table already up to date
свидетельствует о
том, что указанный для таблицы тип (TYPE
) вернул информацию о том, что
таблица не нуждается в проверке.
Различные типы проверки означают следующее:
Тип | Действия |
QUICK |
Не сканировать строки для проверки на неправильные связи. |
FAST |
Проверять только таблицы, которые не были корректно закрыты. |
CHANGED |
Проверять только таблицы, которые изменились со времени последней проверки или не были закрыты корректно. |
MEDIUM |
Сканировать строки для проверки того, что уничтоженные связи в порядке. При этом также подсчитывается ключевая контрольная сумма для строки и сравнивается с подсчитанной контрольной суммой для ключей. |
EXTENDED |
Выполнить полный просмотр ключа для всех ключей для каждой строки. Успех такой проверки гарантирует 100%-ное отсутствие противоречий в таблице, но на проверку уйдет немало времени! |
Для таблиц MyISAM
с динамическими размерами при запуске проверки всегда
выполняется проверка MEDIUM
. Для строк со статическими размерами мы
пропускаем сканирование строк для QUICK
и FAST
, поскольку повреждение
строк происходит крайне редко.
Проверочные опции можно сочетать:
CHECK TABLE test_table FAST QUICK;
Эта команда просто вызовет быструю проверку таблицы для выявления того, была ли она закрыта корректно.
Примечание: в некоторых случаях CHECK TABLE
изменяет таблицу! Это
происходит, если таблица помечена как 'поврежденная/corrupted' или 'не
закрытая корректно/not closed properly', а CHECK TABLE
не находит никаких
проблем в таблице. В этом случае CHECK TABLE
отметит в таблице, что с ней
все нормально.
Если таблица повреждена, то, скорее всего, проблема в индексах, а не в данных. Проверки всех типов обеспечивают всестороннюю проверку индексов и тем самым должны обнаруживать большинство ошибок.
Если проверяется таблица, с которой предположительно все нормально, то
можно опустить проверочные опции или указать опцию QUICK
. Последнюю
возможность следует использовать в случае ограничений по времени и тогда,
когда можно пойти на риск (очень незначительный), что QUICK
пропустит
ошибку в файле данных. (В большинстве случаев MySQL должен найти - при
нормальной работе - любые ошибки в файле с данными. Если ошибки найдены,
то таблица будет отмечена как 'поврежденная/corrupted', и в таком случае
ее нельзя будет использовать, пока она не будет исправлена.)
FAST
и CHANGED
главным образом предназначены для использования в сценариях
(например, для запуска из cron
), если необходимо время от времени
проверять таблицы. В большинстве случаев следует отдавать предпочтение
FAST
перед CHANGED
(иначе надо поступать только в случае, когда возникает
подозрение, что найдена ошибка в самом коде MyISAM
).
Прибегать к EXTENDED
следует только тогда, когда после выполнения
нормальной проверки для таблицы по-прежнему выдаются странные ошибки при
попытке MySQL обновить строку или найти строку по ключу (что очень
маловероятно в случае успеха нормальной проверки!).
Некоторые проблемы, о которых сообщается при проверке таблицы, нельзя исправить автоматически:
-
Found row where the auto_increment column has the value 0
.Это означает, что в таблице есть строка, где индексированный столбец
AUTO_INCREMENT
содержит значение 0 (строку, в которой столбецAUTO_INCREMENT
имеет значение 0, можно создать, явно установив столбец в 0 командойUPDATE
).Это само по себе не является ошибкой, но может вызвать неприятности, если понадобится сделать дамп таблицы или восстановить ее или выполнить над ней
ALTER
TABLE. В этом случае столбец с атрибутомAUTO_INCREMENT
изменит значение в соответствии с правилами для столбцовAUTO_INCREMENT
, что может вызвать проблемы, подобные ошибке дублирования ключа.Чтобы избавиться от предупреждения, просто выполните команду
UPDATE
для установки в столбце значения, отличного от 0.