Сила drop mysql в обход ограничения внешнего ключа

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

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

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

Google нацелил меня на какой-то сайт, который предложил следующий метод:

mysql> SET foreign_key_checks = 0;
mysql> drop table ...
mysql> SET foreign_key_checks = 1;

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

База данных 4.1, поэтому я не могу использовать DROP DATABASE

Идеи?

Ответ 2

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

SET foreign_key_checks = 0;
-- Drop tables
drop table ...
-- Drop views
drop view ...
SET foreign_key_checks = 1;

SET foreign_key_checks = 0 заключается в том, чтобы отключить проверку внешнего ключа, а затем SET foreign_key_checks = 1 - снова установить проверку внешнего ключа. Пока проверка не выполняется, таблицы можно отбросить, затем проверки вернутся, чтобы сохранить целостность структуры таблицы.

Ответ 3

Если вы используете phpmyadmin, эта функция уже существует.

  • Выберите таблицы, которые вы хотите удалить.
  • В раскрывающемся списке внизу списка таблиц выберите drop
  • Будет открыта новая страница с флагом внизу. "Проверка внешнего ключа", снимите флажок.
  • Подтвердите удаление, приняв "да".

Ответ 4

Вы можете использовать следующие шаги, для меня это работало, чтобы отбросить таблицу с ограничением, решение, уже объясненное в приведенном выше комментарии, я просто добавил снимок экрана для этого - enter image description here

Ответ 5

База данных Drop существует во всех версиях MySQL. Но если вы хотите сохранить структуру таблицы, вот идея

mysqldump --no-data --add-drop-database -add-drop-table -hHOSTNAME -uUSERNAME -p > dump.sql

Это программа, а не команда mysql

Затем войдите в mysql и

источник dump.sql;