2011-05-05 20 views
20

tengo 3 mesas y todos ellos tienen motor InnoDB:alter table add key extranjero y que no

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

entonces que hago:

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

y todo va sin problemas, pero cuando intento:

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

me sale:

1452 - No se puede agregar o actualizar una fila secundaria: falla una restricción de clave externa (bascelik_lookaroundyou. < resultado 2 al explicar nombre de archivo '# sql-efa_1a6e91a' >, la restricción FOREIGN KEY #sql-efa_1a6e91a_ibfk_1 (_url) REFERENCIAS video (url) ON DELETE CASCADE)

por qué ???

p.s. Estoy usando phpmyadmin ver. 3.3.9.2

+0

ver allí: http : //stackoverflow.com/questions/4770035/handling-database-integrity (duplicado) – Benj

Respuesta

35

La tabla videoCat tiene una o más filas que infringen la restricción de clave externa. Normalmente, se trata de una fila con un valor para _url que no existe en la tabla de video.

Puede comprobar esto con la siguiente consulta:

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

EDITAR

Por la petición, aquí es una consulta para eliminar esas filas molestos:

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

sí, tiene razón. ¡¡eso es!! muchas gracias. ¿Hay una consulta de selección para sacar esos de videoCat? ;) –

+0

eso es todo !! una vez más muchas muchas gracias !!! –

+1

y por favor, ¿cómo los eliminaría todos con una consulta? –

Cuestiones relacionadas