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
Ответы
Ответ 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
)