cannot add or update a child row

Я создал таблицы в 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 чтобы найти все эти строки в дочерней таблице, которая не имеет соответствующих значений в родительской таблице. Следующий запрос (отсутствующий в других ответах) был бы полезен для получения этих несоответствующих строк:

Теперь вы можете выполнить один или несколько шагов для исправления данных.

  1. Основываясь на вашей «бизнес-логике», вам нужно будет обновить/сопоставить эти unmatching значения с существующими значениями в родительской таблице. Иногда вам может понадобиться также установить их значение null .
  2. Удалите эти строки, имеющие значения unmatching.
  3. Добавьте новые строки в родительскую таблицу, соответствующие значениям 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 (если конечно Ваше поле может принимать такое значение), например:

Оцените статью