4.4.4 Синтаксис CHECK TABLE
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 обновляется
статистика ключей. Команда возвращает таблицу со следующими столбцами:
Таблица 1
Столбец
Таблица 1
Столбец
| Значение
Значение
|
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) не нуждается в проверке.
Различные типы проверки означают следующее:
Таблица 2
Тип
Таблица 2
Тип
| Действия
Действия
|
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.
| | |