Невозможно удалить таблицу MySQL

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

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

РЕДАКТИРОВАТЬ: Вот сообщение об ошибке из SQL:

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

1 ответ

Решение

Неважно, если ваш стол 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 с помощью mysqldump, затем завершить работу демона MySQL, удалить файлы табличного пространства InnoDB, а затем перезапустить и повторно импортировать полученные данные. Это исключит любую возможность повреждения табличного пространства.

Другие вопросы по тегам