2014-02-03 2 views
2

Я получаю странную ошибку. У меня есть таблица animals, которую я пытаюсь сбросить. Я не могу отказаться от таблицы из-за сбоя внешнего ключа. Я знаю, что перед тем, как сбросить стол, я должен сбросить внешние ключи. Проблема в том, что в этой таблице нет внешних ключей. Я уже их бросил. SQLyog отражает, что они были удалены. Но я все еще могу найти их в информационной схеме. Как будто я бросаю ключ наполовину или что-то в этом роде.Не удается удалить таблицу mysql

Как я могу отказаться от этой таблицы, не отбрасывая базу данных? Мне нужно переделать эту таблицу, и я просто хочу ее бросить и воссоздать.

EDIT: Вот сообщение об ошибке из SQL:

Cannot delete or update a parent row: a foreign key constraint fails 
+1

Не удалось опубликовать сообщение об ошибке? –

+2

У других таблиц есть ссылки FK на таблицу «животных»? Вот почему вы не можете его бросить. –

ответ

11

Это не имеет значения, если таблица animals имеет внешние ключи или нет. В любом случае вы могли бы отказаться от таблицы, если у нее были внешние ключи.

Важно то, что есть другие таблицы с внешними ключами, ссылки animals.

Вот как вы можете проверить:

SELECT TABLE_SCHEMA, TABLE_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE (REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME) = ('mydatabase', 'animals'); 

Re ваш комментарий:

Я никогда не слышал о случае, когда внешние ключи были невидимы, но по-прежнему предотвращая стол от падения. Но, полагаю, это возможно.

Вы можете оставить свой стол, если вы делаете это таким образом:

mysql> SET FOREIGN_KEY_CHECKS=0; 
mysql> DROP TABLE animals; 
mysql> SET FOREIGN_KEY_CHECKS=1; 

Однако, я не могу предсказать, что может пойти не так, если табличное InnoDB находится в странном состоянии уже.

В конце концов, что вы, возможно, придется сделать, чтобы очистить это, чтобы сбросить все таблиц InnoDB с использованием туздЫшпр, затем выключить демон MySQL, удалите табличного файлы InnoDB, а затем перезапустить и реимпорт ваши сбрасывали данные. Это устранит любую возможность повреждения табличного пространства.

+0

Отличный ответ! –

+0

Я получаю эту концепцию. Странная часть заключается в том, что предоставленный вами запрос (проделанный очень простой до публикации) возвращает пустой набор. Как будто нет зависимостей. Я все еще не могу отказаться от стола. – wesleywmd

+0

Должно быть, какая-то коррупция какая-то. Я сбросил, выключил, перезапустил и импортировал, как вы описали, и теперь я могу отказаться от таблицы. я не незнакомец с mysql, поэтому я понимаю, как это работает, но это заставило меня пройти через цикл. Спасибо. – wesleywmd

Смежные вопросы