Ошибка SQL Error (1452) Cannot add or update a child row

Ошибка SQL Error (1452) Cannot add or update a child row

Бывает, в практике встречается ошибка при добавление внешнего ключа (foreign key) “SQL Error (1452): Cannot add or update a child row: a foreign key constraint fails” к уже существующей таблице, в которой уже есть данные. Что такое foreign key мы не будем рассматривать, в интернете есть масса статей, где подробно описано применение и создание внешних ключей.

Пример ошибки

Восстанавливая внешние ключи к таблице sales_flat_creditmemo – это Magento таблица, которые были удалены ранее, возможно случайно, возможно нет, мы получаем ошибку, которая есть на картинке.

Причины возникновения ошибки

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

Таблица АТаблица Б
поле_аполе_б

Как найти записи которых нет

Пример запроса для таблицы sales_flat_creditmemo, которая содержит поле order_id ссылаясь на заказы из таблицы sales_flat_order поле entity_id, которых нет

SELECT e.order_id FROM sales_flat_creditmemo AS e
LEFT JOIN sales_flat_order AS o ON e.order_id=o.entity_id
WHERE o.entity_id IS NULL

Записи которые не удалось найти

Так же можно выполнить проверку в самой таблице sales_flat_order, есть ли там заказы на которые ссылается таблица sales_flat_creditmemo

SELECT * FROM sales_flat_order WHERE entity_id=113874

Если запрос нам ничего не вернет, значит мы на правильном пути!

Как решить проблему

Удалить записи из таблицы которые мешают созданию внешнего ключа

DELETE FROM sales_flat_creditmemo WHERE order_id IN(113874,113900,113903,113904,113907,123632,123635,123672,138085,141620,175164)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *