Подтвердить что ты не робот

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

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

# 1217 - Не удается удалить или обновить родительскую строку: ограничение внешнего ключа не работает

Как мне удалить эту таблицу?

4b9b3361

Ответ 1

Это должно сделать трюк:

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

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

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

Ответ 2

Попробуйте следующее:

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

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

Ответ 3

Используйте 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

Ответ 4

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

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

Ответ 5

Я понимаю, что это довольно долгое время, и был выбран ответ, но как альтернатива разрешению внешнего ключа 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 UPDATE CASCADE", а также "ON DELETE SET NULL", чтобы избежать ненужных осложнений, однако ваша настройка может диктовать другой подход.

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