У меня была похожая проблема, но моя была в том, что я добавлял новое поле в существующую таблицу, в которой были данные, а новое поле ссылалось на другое поле из родительской таблицы, а также имело определение NOT NULL и без DEFAULTЦЕННОСТИ.- Я выяснил причину, по которой все не работало, потому что
- Моему новому полю нужно было автоматически заполнить пустые поля значением из родительской таблицы в каждой записи, прежде чем можно было применить ограничение.Каждый раз, когда накладывается ограничение, необходимо сохранить целостность данных таблицы без изменений.Внедрение ограничения (внешнего ключа), хотя некоторые записи в базе данных не имеют значений из родительской таблицы, означало бы, что данные повреждены, поэтому MySQL НИКОГДА НЕ УТВЕРЖДАЕТ ВАШУ ОГРАНИЧЕНИЕ
важно помнить, что при нормальных обстоятельствах, если вы планировали свою базу данных заблаговременно и внедрили ограничения до вставки данных, этого конкретного сценария можно было бы избежать
Более простой подход, чтобы избежать этой ошибки, заключается в
- Сохранение данных таблиц базы данных
- Усечение данных таблицы (и артефактов таблицы, т. Е. Индексов и т. Д.)
- Применение ограничений
- Импорт данных
Надеюсь, это кому-нибудь поможет