2016-12-25 2 views
0

Недавно я перевел некоторые таблицы в новую базу данных. Я оставил внешние ключи этих таблиц, указывающие на таблицы в старой БД.MySQL: не удается добавить внешний ключ

Затем я создал новые версии ссылочных таблиц. Я пробовал сначала изменить FK так, чтобы они указывали на новые ссылки. Это не сработало, поэтому я уронил все старые FK и попытался создать новые. Первый этап прошел без сучка и задоринки. Вторая фаза все же потерпела неудачу с каждым столом, таким же образом! Ответом всегда нравится:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`ml`.`#sql-d04_2`, CONSTRAINT `FK_excoeff_secID` FOREIGN KEY (`SecurityID`) REFERENCES `securities` (`SecurityID`))  

Провал появляется сразу и, кажется, не связаны с фактическими данными. В сообщении об ошибке, как вы можете видеть, место, где обычно расположено имя таблицы, теперь заполнено странной строкой. И независимо от того, что является ссылочной таблицей, ошибка содержит ту же строку.

Все, что произошло в части «Alter table» MySQL WorkBench, но также и как обычный SQL-запрос.

Где я ошибся ???

+0

Возможный дубликат http://stackoverflow.com/questions/21659691/error-1452-cannot-add-or-update-a-child-row-a-foreign-key-constraint-fails –

+0

Нет , это не. Ключевыми отличиями являются 1) странная строка, в которой указано имя таблицы. Это должно означать что-то, и 2) это имя таблицы «_same_» для всех таблиц, которые я пытаюсь добавить к ним FK. 3) Все данные таблицы _was_ управляются эквивалентным внешним ключом. В данных нет конфликтов! – MeirG

ответ

0

Г-н Питер Браули, in the MySQL forums был очень полезным. Его ответ был:

  1. «странная строка» просто имя временной таблицы используется внутри
  2. Причины неудачи, вероятно, старая мода одна - нарушение ссылочной целостности в данных. И он был прав!
  3. И SQL-запрос, чтобы обнаружить виновника (ов):

    SELECT DISTINCT c.ID ОТ child_table КАК С LEFT JOIN parent_table КАК С ИСПОЛЬЗОВАНИЕМ р (ID) ГДЕ p.ID IS NULL;

Смежные вопросы