4.4. Предотвращение катастроф и восстановление
4.4.4. Синтаксис CHECK TABLE
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.