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.
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.
© 1995-2005 MySQL AB. All rights reserved.
