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 conSHOWCREATETABLEporque Query Browser a veces mostrará visualmente soloINTEGERpara ambosINT(10)yINT(11). También debe verificar que uno no estéSIGNEDy 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
MyISAMmesa. Para usar claves foráneas, las tablas deben ser ambasInnoDB. (En realidad, si ambas tablas sonMyISAMentonces no obtendrá un mensaje de error, simplemente no creará la clave). En Query Browser, puede especificar el tipo de tabla. - Ha especificado una cascada
ONDELETESETNULL, pero el campo clave relevante está establecido enNOTNULL. Puede solucionar esto cambiando su cascada o configurando el campo para permitirNULLvalores. - 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
ALTERdeclaració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