Error de MySQL 150, no se puede crear la tabla
-
22-07-2019 - |
Pregunta
Tengo problemas para crear una tabla y no entiendo qué está mal. phpMyAdmin establece el indicador de error junto a la declaración PRIMARY KEY ... No entiendo por qué esto está mal ...
Esta tabla es una tabla secundaria, que tiene una relación de identificación de uno a muchos con otra tabla.
CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;
MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150)
EDITAR: esta es toda la documentación sobre el código de error que puedo encontrar: Enlace
EDIT2: foto eliminada
EDITAR3:
CREATE TABLE `gebruikers` (
`gebruiker_id` int(11) NOT NULL,
`naam` varchar(45) NOT NULL,
`straat` varchar(45) NOT NULL,
`gemeente` varchar(45) NOT NULL,
`mail` varchar(45) NOT NULL,
`beschrijving` varchar(45) DEFAULT NULL,
PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Solución
Compruebe que Gebruikers_gebruiker_id
y Gebruikers
. gebruiker_id
tienen el mismo tipo de datos.
Compruebe también que Gebruikers
. gebruiker_id
es una PRIMARY KEY
en Gebruikers
Update:
Tiene ON DELETE SET NULL
definido, mientras que su Gebruikers_gebruiker_id
se define como NOT NULL
.
Solucionarlo (cambiar a EN ELIMINAR CASCADA
o simplemente eliminar la cláusula) y podrá crear la referencia.
Otros consejos
En mi caso, suele ser debido a una falta de coincidencia de tipo de datos. Recuerde que si se trata de una verificación internacional, ambos están sin firmar o no
Esto no es una característica con errores de mysql. ¡Puede haber dos posibles razones para esto! 1) los tipos de datos de PK y FK no coinciden. 2) Este error puede aparecer en versiones anteriores a la 4.1 donde necesita definir explícitamente índices.
Una razón más para agregar:
Diferentes juegos de caracteres o motores también causarán este problema
En mi experiencia personal, esta es una característica muy defectuosa de MySQL, y la menor molestia es simplemente volcar la estructura y los datos de la tabla, luego soltar la tabla y volver a ejecutar el SQL desde el volcado y luego volver a crear manualmente los índices y restricciones de clave externa donde sea necesario.
Tenía una restricción con el mismo nombre en una tabla diferente. Intente cambiar el nombre de su restricción.