Подтвердить что ты не робот

Alter table добавить внешний ключ не удается

У меня есть 3 таблицы, и все они имеют движок innodb:

video(url, title, desc, country,...) url -> primary key
videoCat(_url, category) {_url,category} -> primary key
favorite(fav_url, thumb_path) fav_url -> primary key

тогда я:

alter table favorite
add foreign key(fav_url) references video(url)
on delete cascade

и все идет гладко, но когда я пытаюсь:

alter table videoCat
add foreign key(_url) references video(url)
on delete cascade

Я получаю:

1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается с ошибкой (bascelik_lookaroundyou. < результат 2 при объяснении имени файла '# sql-efa_1a6e91a' > , CONSTRAINT #sql-efa_1a6e91a_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (_url) СПИСОК ЛИТЕРАТУРЫ video (url) УДАЛИТЬ КАСКАД)

почему???

p.s. Я использую phpmyadmin ver. 3.3.9.2

4b9b3361

Ответ 1

В таблице videoCat есть одна или несколько строк, которая нарушает ограничение внешнего ключа. Обычно это означает, что у вас есть строка со значением для _url, которое не существует в видео в таблице.

Вы можете проверить это со следующим запросом:

SELECT videoCat._url
FROM videoCat LEFT JOIN video ON videoCat._url = video.url
WHERE video.url IS NULL

ИЗМЕНИТЬ

В запросе здесь содержится запрос на удаление этих досадных строк:

DELETE FROM videoCat
WHERE NOT EXISTS (
    SELECT *
    FROM video
    WHERE url = videoCat._url
)