2011-05-05 2 views
20

실패테이블 변경은 내가 3 개 테이블을 가지고 있고 그들은 모두 이노 엔진이

다음
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 DELETE CASCADE ON 이름 '#의 SQL-efa_1a6e91a'>, CONSTRAINT #sql-efa_1a6e91a_ibfk_1 FOREIGN KEY (_url) video (url)를 참조 참조)

이유를 설명 할 때 ???

p.s. phpmyadmin ver을 사용하고 있습니다. 3.3.9.2

+0

:

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

편집 요청에 따라

, 여기에 그 성가신 행을 삭제하는 쿼리의 HTTP : //stackoverflow.com/questions/4770035/handling-database-integrity (duplicate) – Benj

답변

35

table videoCat에 외래 키 제약 조건을 위반하는 하나 이상의 행이 있습니다. 일반적으로 테이블 비디오에없는 _url 값이있는 행이 있습니다. 다음과 같은 쿼리를이 확인할 수 있습니다

: 참조가

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

예, 맞습니다. 그게 다야 !! 많은 감사. VideoCat에서 해당 쿼리를 가져 오기위한 선택 쿼리가 있습니까? ;) –

+0

그것은 그 것이다! 다시 한번 많은 감사합니다 !!! –

+1

그리고 제발, 하나의 검색어로 어떻게 모두 삭제 하시겠습니까? –

관련 문제