alter table add外键失败

dan*_*aba 21 mysql

我有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
Run Code Online (Sandbox Code Playgroud)

然后我做:

alter table favorite
add foreign key(fav_url) references video(url)
on delete cascade
Run Code Online (Sandbox Code Playgroud)

一切顺利,但当我尝试:

alter table videoCat
add foreign key(_url) references video(url)
on delete cascade
Run Code Online (Sandbox Code Playgroud)

我明白了:

1452 - 无法添加或更新子行:外键约束失败(bascelik_lookaroundyou.<结果2解释文件名'#sql-efa_1a6e91a'>,CONSTRAINT #sql-efa_1a6e91a_ibfk_1FOREIGN KEY(_url)REFERENCES video(url)ON DELETE CASCADE)

为什么???

ps我正在使用phpmyadmin ver.3.3.9.2

Ted*_*opp 39

表videoCat有一行或多行违反外键约束.通常情况下,您有一个具有_url值但在表视频中不存在的行.

您可以使用以下查询检查:

SELECT videoCat._url
FROM videoCat LEFT JOIN video ON videoCat._url = video.url
WHERE video.url IS NULL
Run Code Online (Sandbox Code Playgroud)

编辑

每个请求,这是一个删除那些讨厌的行的查询:

DELETE FROM videoCat
WHERE NOT EXISTS (
    SELECT *
    FROM video
    WHERE url = videoCat._url
)
Run Code Online (Sandbox Code Playgroud)