16/07/2015, 09:41
|
| Moderador criollo | | Fecha de Ingreso: noviembre-2007 Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años 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 |