4.4: Синтаксис CHECK TABLE в MySQL
Главная Страница » Книги по PHP » MySQL уроки для начинающих с нуля » Синтаксис CHECK TABLE в MySQL
CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE работает только с таблицами типа MyISAM. На них данная команда эквивалентна вызову myisamchk -m table_name.
Если вы не определяете опций, используется MEDIUM.
Данная команда проверяет, есть ли в таблице ошибки. Для таблиц типа MyISAM модифицируется статистика ключей. Команда возвращает таблицу со следующими столбцами (табл. 4.3):
Таблица 4.3. Отчет о проверке на ошибки
Столбец | Значение |
Table | Имя таблицы |
Ор | Обязательно check |
Msg_type | Одно из 4-х: status, error, info или warning |
Msg_text | Собственно сообщение |
Обратите внимание, что вы можете получать много строк информации для каждой проверенной таблицы. Последняя строка будет иметь тип Msg_type status и значение ОК, если все хорошо. Если ответов ОК или Not checked нет, вы должны выполнить «ремонт» таблицы. Сообщение Not checked говорит о том, что для данной таблицы TYPE сообщил MySQL, что там не было никакой потребности проверять таблицу.
Различные типы проверки показаны в табл. 4.4:
Таблица 4.4. Типы проверки на ошибки
Тип | Значение |
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, при нормальном использовании, должен сам найти любую ошибку в файле данных. Если это получается, таблица будет отмечена как разрушеная, тогда вы не сможете использовать таблицу, пока ошибка не будет восстановлена ради сохранения данных.
FAST и CHANGED обычно предназначены для использования из скрипта (например, из cron), если вы хотите проверять таблицу время от времени. В большинстве случаев FAST имеет приоритет перед CHANGED.
EXTENDED должен использоваться после того, как вы выполнили нормальную проверку, но все еще сталкиваетесь с ошибками в таблице, когда MySQL пробует модифицировать строку или найти строку по ключу (это маловероятно, если нормальная проверка прошла благополучно).
Есть проблема, сообщаемая проверкой таблиц, которая не может быть исправлена в автоматическом режиме: найдена строка, где столбец auto_increment имеет значение 0. Это означает, что у вас в таблице есть строка, содержащая в столбце индекса auto_increment значение 0. Можно легко создать такую конструкцию командой UPDATE.
Это не ошибка сама по себе, но может вызывать проблему, если вы сбрасываете таблицу в дамп, а потом восстанавливаете ее оттуда или задаете команду таблице ALTER TABLE. В этом случае столбец auto_increment изменит значение, согласно правилам auto_increment, что может вызвать проблемы подобно ошибке дублирования ключа. Избавиться от предупреждения можно, только выполнив инструкцию UPDATE, чтобы установить столбец к некоторому другому значению (не 0).