Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/07/2015, 09:41
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: FATAL ERROR: Integrity constraint violation: 1452 Cannot add or update a c

No, no has entendido el tema...

¿Tienes claro lo que es una FOREIGN KEY?

Es un campo o conjunto de campos que se referencia a la PRIMARY KEY de otra tabla, y sólo puede contener valores que existan como PK en la tabla referida.

En principio, eso implica que no puedes apuntar arbitrariamente un campo a cualquier otro de otra tabla. Sólo a la PK y para que sea válido crearla debe ser del mismo tipo de columna, igual rango, charset y collation (estos dos últimos sólo para los datos de tipo cadena).
Ahora bien, el error que se te da suele aparecer en dos situaciones:
1) Estás intentando agregar una constraint FK y existen datos en la tabla de la FK que no existen como PK en la tabla referida.
2) Estás intentando INSERTAR un registro en la tabla de la FK, donde a la FK le estás poniendo un dato que no existe en la PK de la tabla referida.

Nota 1: Como caso exclusivo, MySQL admite crear una FK que no apunte a la PK, pero en ese caso debe apuntar en la tabla referida a un campo declarado como UNIQUE (cumple con el requerimiento de unicidad de valores para una FK).

Nota 2: Cuando se menciona el concepto "conjunto de campos", se hace referencia a que si la tabla a la que se hará referencia tiene una PK definida sobre más de una columna (PK compuesta), la FK se debe construir con la misma cantidad de campos, del mismo tipo, y en el mismo orden de la definición de PK de la tabla referida.

Nota 3: En un INSERT a una tabla con una FK, el valor de la PK a que hará referencia debe existir siempre en la tabla referida antes de intentar insertar el registro que la contiene como FK.
Si lo intentas al revés te fallará.

Posdata: Verifiqué tu script y no tiene ningún defecto formal que pueda generar el error, así que apostaría que los INSERT los estás haciendo incorrectamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/07/2015 a las 07:30