Código de error:1005:hay una referencia de clave principal incorrecta en su código
Por lo general, se debe a un campo de clave externa al que se hace referencia que no existe. Es posible que tenga un error tipográfico, o verifique si debería ser el mismo, o hay una falta de coincidencia en el tipo de campo. Los campos vinculados a claves foráneas deben coincidir exactamente con las definiciones.
Algunas causas conocidas pueden ser:
- El tipo y/o el tamaño de los dos campos clave no coinciden exactamente. Por ejemplo, si uno es
INT(10)
el campo clave debe serINT(10)
también y noINT(11)
oTINYINT
. Es posible que desee confirmar el tamaño del campo conSHOW
CREATE
TABLE
porque Query Browser a veces mostrará visualmente soloINTEGER
para ambosINT(10)
yINT(11)
. También debe verificar que uno no estéSIGNED
y el otro esUNSIGNED
. Ambos deben ser exactamente iguales. - Uno de los campos clave al que intenta hacer referencia no tiene un índice y/o no es una clave principal. Si uno de los campos de la relación no es una clave principal, debe crear un índice para ese campo.
- El nombre de la clave externa es un duplicado de una clave ya existente. Verifique que el nombre de su clave externa sea único dentro de su base de datos. Simplemente agregue algunos caracteres aleatorios al final de su nombre clave para probar esto.
- Una o ambas tablas es un
MyISAM
mesa. Para usar claves foráneas, las tablas deben ser ambasInnoDB
. (En realidad, si ambas tablas sonMyISAM
entonces no obtendrá un mensaje de error, simplemente no creará la clave). En Query Browser, puede especificar el tipo de tabla. - Ha especificado una cascada
ON
DELETE
SET
NULL
, pero el campo clave relevante está establecido enNOT
NULL
. Puede solucionar esto cambiando su cascada o configurando el campo para permitirNULL
valores. - Asegúrese de que las opciones Charset y Collate sean las mismas tanto a nivel de tabla como a nivel de campo individual para las columnas clave.
- Tiene un valor predeterminado (es decir, predeterminado =0) en su columna de clave externa
- Uno de los campos de la relación forma parte de una clave combinada (compuesta) y no tiene su propio índice individual. Aunque el campo tiene un índice como parte de la clave compuesta, debe crear un índice separado solo para ese campo clave para usarlo en una restricción.
- Tiene un error de sintaxis en su
ALTER
declaración o ha escrito mal uno de los nombres de campo en la relación - El nombre de su clave externa supera la longitud máxima de 64 caracteres.
Para obtener más detalles, consulte:Número de error de MySQL 1005 No se puede crear la tabla