PHP скрипты

MySQL

Apache

phpMyADmin

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).

Поделиться с друзьями