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 section 4.4.6 Использование myisamchk
для профилактики таблиц и послеаварийного). Not checked
свидетельствует о
том, что указанный для таблицы тип (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.