22

I have 3 tables and they all have innodb engine:

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

then I do:

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

and everything goes smooth, but when I try:

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

I get:

1452 - Cannot add or update a child row: a foreign key constraint fails (bascelik_lookaroundyou.<result 2 when explaining filename '#sql-efa_1a6e91a'>, CONSTRAINT #sql-efa_1a6e91a_ibfk_1 FOREIGN KEY (_url) REFERENCES video (url) ON DELETE CASCADE)

why???

p.s. I am using phpmyadmin ver. 3.3.9.2

Johan
  • 74,508
  • 24
  • 191
  • 319
daniel.tosaba
  • 2,503
  • 9
  • 36
  • 47
  • See there : http://stackoverflow.com/questions/4770035/handling-database-integrity (duplicate) – Benj Apr 16 '13 at 10:31

1 Answers1

40

The table videoCat has one or more rows that violates the foreign key constraint. This is usually that you have a row with a value for _url that does not exist in the table video.

You can check for this with the following query:

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

EDIT

Per request, here's a query to delete those pesky rows:

DELETE FROM videoCat
WHERE NOT EXISTS (
    SELECT *
    FROM video
    WHERE url = videoCat._url
)
Ted Hopp
  • 232,168
  • 48
  • 399
  • 521