Busqué una solución a este problema en Internet y verifiqué las preguntas de Stack Overflow, pero ninguna de las soluciones funcionó para mi caso.
Quiero crear una clave externa de la tabla sira_no a metal_kod.
ALTER TABLE sira_no
ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU)
REFERENCES metal_kod(METAL_KODU)
ON DELETE SET NULL
ON UPDATE SET NULL ;
Este script devuelve:
Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150)
Intenté agregar un índice a la tabla referenciada:
CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU);
Revisé METAL_KODU en ambas tablas (juego de caracteres y colación), pero no pude encontrar una solución a este problema. ¿Como puedo solucionar este problema?
Aquí está la tabla metal_kod:
METAL_KODU varchar(4) NO PRI
DURUM bit(1) NO
METAL_ISMI varchar(30) NO
AYAR_YOGUNLUK smallint(6) YES 100
mysql
foreign-keys
mysql-error-1005
lamostreta
fuente
fuente
metal_kod
tabla ... qué campo de esa tabla debe hacer referencia a la clave externa?Respuestas:
Código de error: 1005: hay una referencia de clave primaria incorrecta en su código
Por lo general, se debe a un campo de clave externa referenciado que no existe. Puede ser que tenga un error tipográfico, o marque si debería ser el mismo, o hay una falta de coincidencia en el tipo de campo. Los campos vinculados a claves externas deben coincidir exactamente con las definiciones.
Algunas causas conocidas pueden ser:
INT(10)
el campo clave debe serINT(10)
así y noINT(11)
oTINYINT
. Es posible que desee confirmar el tamaño del campo utilizandoSHOW
CREATE
TABLE
porque el Explorador de consultas a veces se mostrará visualmente soloINTEGER
para ambosINT(10)
yINT(11)
. También debe comprobar que uno no lo esSIGNED
y el otro síUNSIGNED
. Ambos deben ser exactamente iguales.MyISAM
mesa. Para utilizar claves foráneas, las tablas deben serInnoDB
. (En realidad, si ambas tablas lo sonMyISAM
, no recibirá un mensaje de error, simplemente no creará la clave). En el Explorador de consultas, puede especificar el tipo de tabla.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.ALTER
declaración o ha escrito mal uno de los nombres de campo en la relaciónPara obtener más detalles, consulte: Número de error de MySQL 1005 No se puede crear la tabla
fuente
SHOW ENGINE INNODB STATUS
como se menciona en esta pregunta, me ayudó a diagnosticar mi problema particular (PEBCAK, en mi caso ...)set names 'utf8', storage_engine=MYISAM;
al comienzo del guión resolvió el problema para mí. ¡Gracias @ user319198 y @Stefano por la respuesta elaborada! : o)Esto también podría suceder al exportar su base de datos de un servidor a otro y las tablas se enumeran en orden alfabético de forma predeterminada.
Entonces, su primera tabla podría tener una clave externa de otra tabla que aún no se ha creado. En tales casos, desactive Foreign_key_checks y cree la base de datos.
Simplemente agregue lo siguiente a su secuencia de comandos:
y funcionará.
fuente
Muy a menudo sucede cuando la clave externa y la clave de referencia no tienen el mismo tipo o la misma longitud.
fuente
A veces se debe a que la tabla maestra se descarta (tal vez al deshabilitar las verificaciones de claves externas), pero la clave externa CONSTRAINT todavía existe en otras tablas. En mi caso, había dejado caer la tabla e intenté recrearla, pero me estaba arrojando el mismo error.
Así que intente eliminar todas las RESTRICCIONES de clave externa de todas las tablas, si las hay, y luego actualice o cree la tabla.
fuente
Tuve un error similar. El problema tenía que ver con que la tabla secundaria y principal no tenían el mismo juego de caracteres y clasificación. Esto se puede solucionar agregando ENGINE = InnoDB DEFAULT CHARACTER SET = utf8;
... en la declaración SQL significa que falta algún código.
fuente
La clave externa debe tener exactamente el mismo tipo que la clave principal a la que hace referencia. Para el ejemplo tiene el tipo "INT UNSIGNED NOT NULL" la clave extranjera también tiene que "INT UNSIGNED NOT NULL"
fuente
Código de error: 1005
Tuve un problema similar, así que aquí hay algunas cosas que probé (no en ningún orden, excepto por la solución :))
Finalmente, vi que tenía dos editores abiertos. Uno en PhpStorm (JetBrains) y el otro en el banco de trabajo MySQL. Parece que PhpStorm / MySQL Workbench crea algún tipo de bloqueo de edición.
Cerré PhpStorm solo para verificar si el bloqueo era el caso (podría haber sido al revés). Esto resolvió mi problema.
fuente
Tuve el mismo mensaje de error. Finalmente descubrí que había escrito mal el nombre de la tabla en el comando:
versus
Me pregunto por qué demonios MySQL no puede decir que tal tabla no existe ...
fuente
MyISAM se acaba de mencionar. Simplemente intente agregar ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 2; al final de una declaración, asumiendo que sus otras tablas fueron creadas con MyISAM.
fuente
En mi caso, sucedió cuando una tabla es InnoB y otra es MyISAM. Cambiar el motor de una tabla, a través de MySQL Workbench, me resuelve.
fuente
Sucedió en mi caso, porque el nombre de la tabla a la que se hace referencia en la declaración de restricción no era correcto (olvidé las mayúsculas en el nombre de la tabla):
fuente
compruebe que ambas tablas tienen el mismo esquema InnoDB MyISAM. Los hice todos iguales en mi caso InnoDB y trabajé
fuente
Mi problema no estaba en la lista, era algo tan tonto ..... La tabla que tiene
FK
como PK era un compuestoPK
que se declaró así: clave primaria (CNPJ
,CEP
) Quería que el campo CEP estuvieraFK
en otra tabla y estaba atascado en este error, la moraleja de la historia simplemente invirtió el código anterior para la clave principal (CEP
,CNPJ
) y funcionó. Recibe propinas a sus amigos.fuente