Не удается удалить таблицу: ограничение внешнего ключа не выполняется
В MySQL я хочу отказаться от таблицы.
Я пробовал много вещей, но я продолжаю получать сообщение об ошибке, что таблица с именем bericht
не может быть удалена. Это ошибка, которую я получаю:
# 1217 - Не удается удалить или обновить родительскую строку: ограничение внешнего ключа не работает
Как мне удалить эту таблицу?
Ответы
Ответ 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", чтобы избежать ненужных осложнений, однако ваша настройка может диктовать другой подход.
Надеюсь, что это поможет.