Я создал таблицы в MySQL Workbench, как показано ниже:
Таблица ORDRE:
Таблица PRODUKT:
и таблица ORDRELINJE:
поэтому, когда я пытаюсь вставить значения в таблицу ORDRELINJE , я получаю:
Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается с ошибкой ( srdjank . ORDRELINJE , CONSTRAINT Ordrelinje_fk ИНОСТРАННЫЙ КЛЮЧ ( Ordre ) ССЫЛКИ Ordre ( OrdreID ) )
Я видел другие сообщения на эту тему, но не повезло. Я наблюдаю за чем-то или за какую-то идею, что делать?
Внешние отношения ключей включают родительскую таблицу, которая содержит значения центральных данных и дочерняя таблица с одинаковыми значениями, указывающими назад к своему родителю. Предложение FOREIGN KEY указывается в дочернем таблица.
Он отклонит любую операцию INSERT или UPDATE, которая пытается создать значение внешнего ключа в дочерней таблице, если нет соответствующего ключевое значение кандидата в родительской таблице.
Таким образом, ваша ошибка Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails по существу означает, что вы пытаетесь добавить строку в таблицу Ordrelinje , для которой не существует соответствующей строки (OrderID) в таблице Ordre .
Сначала вы должны вставить строку в таблицу Ordre .
Вы получаете эту проверку ограничений, поскольку таблица ordre не имеет идентификатора ссылочного заказа, указанного в команде вставки.
Чтобы вставить значение в ordrelinje, сначала нужно ввести значение в таблицу ordre и использовать тот же ordreID в таблице orderlinje.
Или вы можете удалить ненулевое ограничение и вставить в него значение NULL.
Вы должны удалить данные в дочерней таблице, которые не имеют соответствующего значения внешнего ключа первичному ключу родительской таблицы. Или удалить все данные из дочерней таблицы, а затем вставить новые данные, имеющие то же значение внешнего ключа, что и первичный ключ в родительской таблице., Это должно работать. Здесь также YouTube видео
Эта ошибка обычно возникает из-за того, что мы имеем некоторые значения в ссылочном поле дочерней таблицы, которых нет в поле ссылки/кандидата родительской таблицы.
Иногда мы можем получить эту ошибку, когда применяем ограничения внешнего ключа к существующим таблицам, имея в них данные уже. Некоторые другие ответы предлагают полностью удалить данные из дочерней таблицы, а затем применить ограничение. Однако это не вариант, когда у нас уже есть рабочие/производственные данные в дочерней таблице. В большинстве сценариев нам нужно будет обновить данные в дочерней таблице (вместо их удаления).
Теперь мы можем использовать Left Join чтобы найти все эти строки в дочерней таблице, которая не имеет соответствующих значений в родительской таблице. Следующий запрос (отсутствующий в других ответах) был бы полезен для получения этих несоответствующих строк:
Теперь вы можете выполнить один или несколько шагов для исправления данных.
- Основываясь на вашей «бизнес-логике», вам нужно будет обновить/сопоставить эти unmatching значения с существующими значениями в родительской таблице. Иногда вам может понадобиться также установить их значение null .
- Удалите эти строки, имеющие значения unmatching.
- Добавьте новые строки в родительскую таблицу, соответствующие значениям unmatching в дочерней таблице.
Как только данные будут исправлены, мы можем применить ограничение внешнего ключа, используя синтаксис ALTER TABLE .
Блог о информационных технологиях и не только
четверг, 26 мая 2011 г.
MySQL ERROR 1452: Cannot add or update a child row: a foreign key constraint fails
ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`xxx`, CONSTRAINT `fk_xxx` FOREIGN KEY (`xxx`) REFERENCES `xxx` (`xxx`))
Table2 (дочерняя)
id idParent Name
1 5 тест 5.1
2 1 тест 1.1
Melkij описал причину ошибки, соответственно что бы устранить ее Вам нужно изменить данные:
1. Либо вообще удалить все несоответствующие данные, например:
2. Либо установить значение для magazin в таблица add_photos_store в NULL (если конечно Ваше поле может принимать такое значение), например:
Источник: