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
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top