Проблема в том, что:
- , если у вас есть две таблицы A и B и ссылка внешнего ключа в A, которая ссылается на B.
- , и вы хотите удалить таблицы
Сначала необходимо удалить ограничение внешнего ключа.(за исключением того, что вы знаете правильную последовательность и не имеете циклических зависимостей)
Таким образом, вы обычно сначала удаляете все ограничения, а затем отбрасываете таблицы.
Если одна таблица не существует (поскольку она новая)тогда вы используете drop table if exists
Но, к сожалению, my-sql как оператор не удаляет forainkey, только если таблица существует.Так что это скорее недостаток возможностей, чем ошибка.
Я решил это, но мои настройки отличаются.Я использую hibernate только в режиме проверки и запускаю сценарии для обновления базы данных вручную.Сценарии создаются hibernate org.hibernate.tool.hbm2ddl.SchemaExport
.Затем я беру сгенерированный файл, добавив set foreign_key_checks = 0;
в начале и set foreign_key_checks = 1;
в конце.Затем я прокомментировал (добавьте --
в начале) каждую строку, которая соответствует шаблону alter table *. drop foreign key *.;
@ См. https://stackoverflow.com/a/34038447/280244 для получения более подробной информации