Невозможно удалить таблицу: ограничение внешнего ключа не выполнено

В MySQL я хочу сбросить таблицу.
Я много чего перепробовал, но постоянно получаю сообщение об ошибкеbericht не может быть отброшен. Это ошибка, которую я получаю:

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

Как мне бросить эту таблицу?

 Douglas Ludlow19 июн. 2012 г., 14:35
Помогает ли вам какой-либо из этих ответов?stackoverflow.com/questions/1905470/… stackoverflow.com/questions/3334619/…
 BugFinder19 июн. 2012 г., 14:27
Вам нужно удалить требование по другим таблицам на той, которая вам больше не нужна
 Michael Berkowski19 июн. 2012 г., 14:27
Узнайте, какая другая таблица ссылается на нее через внешний ключ, и сначала удалите ограничение FK для этой таблицы, а затем удалите эту таблицу.

Ответы на вопрос(5)

эта таблица совпадает с другой схемой, по которой вы получаете эту ошибку.

Вам нужно сначала удалить дочернюю строку, а затем родительскую.

 28 февр. 2019 г., 10:17
Можете ли вы объяснить это дальше? Как можно найти эту «родительскую строку»?

show create table tbl_name просмотреть внешние ключи

Вы можете использовать этот синтаксис для удаления внешнего ключа:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

Здесь также больше информации (см. Пост Фрэнка Вандерхаллена): http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1;

Как отмечают другие, это почти никогда не то, что вы хотите, даже при том, что задано в вопросе. Более безопасным решением является удаление таблиц в зависимости отbericht перед удалениемbericht, См CloudyMarble ответ о том, как это сделать. Я использую bash и метод в своем посте, чтобы удалить все таблицы в базе данных, когда я не хочу или не могу удалить и заново создать саму базу данных.

#1217 Ошибка возникает, когда другие таблицы имеют ограничения внешнего ключа для таблицы, которую вы пытаетесь удалить, и вы используете ядро базы данных InnoDB. Это решение временно отключает проверку ограничений, а затем снова включает их. Прочитайтедокументация для большего. Обязательно удалите ограничения и поля внешнего ключа в таблицах в зависимости отberichtиначе вы можете оставить свою базу данных в поврежденном состоянии.

 03 апр. 2015 г., 13:09
Это должен быть выбран ответ
 22 февр. 2016 г., 10:20
Хотя это правильно, это удивительно плохая практика. Как было указано несколькими пользователями (включая Rune Kaagaard), вы должны найти ссылки, проанализировать и удалить их по мере необходимости.
 28 февр. 2017 г., 20:21
В сценарии, где кто-то удаляет таблицу, а затем создает ее снова (возможно, с некоторыми изменениями, но там, где остается столбец FK), это отличное решение. Как только таблица создается снова, внешние ключи в других таблицах все еще работают. В сторону: вместо DROP можно изменить таблицу, а затем CREATE - что, возможно, является более правильным решением. Однако, если вы используете скрипт для создания таблиц, я думаю, что имеет смысл использовать метод DROP / CREATE.
 18 нояб. 2015 г., 16:46
до сих пор это лучший ответ и должен быть на вершине !!!!!!
 11 апр. 2017 г., 10:26
У меня была ситуация, когда никакие таблицы не ссылались на таблицу, которую я пытался удалить, но получили ту же ошибку.select * from information_schema.KEY_COLUMN_USAGE where referenced_table_name = 'table_to_delete'; вернул пустой набор. Я предполагаю, что это была проблема с движком InnoDB. Это решение работало и в моем случае.

что это на некоторое время устарело, и ответ был выбран, но как насчет альтернативы, позволяющей использовать внешний ключ?NULL а затем выберитеON DELETE SET NULL.

По сути, ваша таблица должна быть изменена следующим образом:

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

Лично я бы порекомендовал использовать оба параметра "ОБНОВЛЕНИЕ КАСКАДА" а также "ON DELETE SET NULL" чтобы избежать ненужных осложнений, однако ваши настройки могут диктовать другой подход.

Надеюсь это поможет.

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable';

Это должно предоставить вам, какие таблицы имеют ссылки на таблицу, которую вы хотите удалить, после того, как вы удалите эти ссылки, или наборы данных, которые ссылаются на наборы данных в этой таблице, вы сможете удалить таблицу.

 13 апр. 2017 г., 09:04
это сработало для меня, этот ответ должен быть помечен как принятый.
 09 мар. 2016 г., 17:08
Это решение намного лучше. Это безопаснее, и это не плохая практика, как выбранный ответ.

Ваш ответ на вопрос