Errore MySQL 150, impossibile creare la tabella
-
22-07-2019 - |
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
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.