Domanda

Ho problemi a creare una tabella e non capisco cosa c'è che non va. phpMyAdmin imposta l'indicatore di errore accanto alla dichiarazione PRIMARY KEY ... Non capisco perché sia ??sbagliato ...

Questa tabella è una tabella figlio, che ha una relazione di identificazione uno-a-molti con un'altra tabella.

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) 

EDIT: questa è tutta la documentazione sul codice di errore che posso trovare: Link

EDIT2: foto rimossa

EDIT3:

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
È stato utile?

Soluzione

Verifica che Gebruikers_gebruiker_id e Gebruikers . gebruiker_id hanno lo stesso tipo di dati.

Controlla anche che Gebruikers . gebruiker_id sia un PRIMARY KEY in Gebruikers

Aggiornamento:

Hai ON DELETE SET NULL , mentre Gebruikers_gebruiker_id è definito come NOT NULL .

Risolvilo (passa a ON DELETE CASCADE o rimuovi semplicemente la clausola) e sarai in grado di creare il riferimento.

Altri suggerimenti

Nel mio caso, in genere è a causa di una mancata corrispondenza del tipo di dati. Ricorda se è un controllo int che entrambi sono non firmati o meno

Questa non è molto una caratteristica buggy di mysql. Ci possono essere due possibili ragioni per questo! 1) i tipi di dati di PK e FK non corrispondono. 2) Questo errore può apparire nelle versioni precedenti alla 4.1 in cui è necessario definire esplicitamente gli indici.

Un motivo in più per aggiungere:

  

Anche diversi set di caratteri o motori causeranno questo problema

Nella mia esperienza personale questa è una caratteristica molto buggy di MySQL - e il minimo problema è semplicemente scaricare la struttura e i dati della tabella, quindi eliminare la tabella e rieseguire l'SQL dal dump, quindi ricreare manualmente gli indici e vincoli di chiave esterna ove necessario.

Avevo un vincolo con lo stesso nome in una tabella diversa. Prova a cambiare il nome del tuo vincolo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top