Прежде всего, вы должны знать, что ключи и индексы являются синонимами в MySQL. Если вы посмотрите документацию о синтаксисе CREATE TABLE , вы можете прочитать:
KEY
обычно является синонимом INDEX
. Ключевой атрибут PRIMARY KEY
также может быть указан как просто KEY
, если он задан в определении столбца. Это было реализовано для совместимости с другими системами баз данных.
Теперь, ошибка, которую вы получаете, может быть вызвана двумя причинами:
- Проблемы с диском на сервере MySQL
- Поврежденные ключи / таблицы
В первом случае вы увидите, что добавление ограничения к вашему запросу может временно решить проблему. Если это вам подходит, вероятно, у вас есть папка tmp
, которая слишком мала для размера запросов, которые вы пытаетесь выполнить. Затем вы можете решить или увеличить tmp
, или сделать ваши запросы меньше! ;)
Иногда tmp
достаточно велик, но все еще заполнен, в этих ситуациях вам нужно будет выполнить некоторую ручную очистку.
Во втором случае существуют реальные проблемы с данными MySQL. Если вы можете легко вставить данные заново, я бы посоветовал просто удалить / заново создать таблицу и заново вставить данные. Если вы не можете, попробуйте восстановить стол на месте с помощью REPAIR table . Это, как правило, длительный процесс, который вполне может дать сбой.
Посмотрите на сообщение об ошибке complete , которое вы получите:
Неверный ключевой файл для таблицы 'FILEPATH.MYI'; попробуй починить
В сообщении упоминается, что вы можете попытаться восстановить его. Кроме того, если вы посмотрите на фактическую FILEPATH, которую вы получите, вы можете узнать больше:
если это что-то вроде /tmp/#sql_ab34_23f
, это означает, что MySQL необходимо создать временную таблицу из-за размера запроса. Он хранит его в / tmp, и в вашей / tmp недостаточно места для этой временной таблицы.
, если вместо этого оно содержит имя фактической таблицы, это означает, что эта таблица, скорее всего, повреждена, и вы должны исправить ее.
Если вы обнаружили, что проблема связана с размером / tmp, просто прочитайте этот ответ на аналогичный вопрос для исправления: MySQL, ошибка 126: неверный файл ключа для таблицы .