MySQL-Fehler 150 kann nicht Tabelle erstellen
-
22-07-2019 - |
Frage
Ich habe Probleme beim Erstellen einer Tabelle, und ich verstehe nicht, was los ist. phpMyAdmin setzt die Fehleranzeige neben dem PRIMARY KEY Erklärung ... Ich verstehe nicht, warum dies falsch ist ...
Diese Tabelle ist eine untergeordnete Tabelle, die eine mit einem anderen Tisch Eins-zu-vielen identifizierende Beziehung hat.
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: Das ist die gesamte Dokumentation über den Fehlercode ich finden kann: Link
EDIT2: pic entfernt
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
Lösung
Überprüfen Sie, dass Gebruikers_gebruiker_id
und Gebruikers
.gebruiker_id
haben denselben Datentyp.
Sie auch, dass Gebruikers
.gebruiker_id
überprüfen ist ein PRIMARY KEY
in Gebruikers
Update:
Sie haben ON DELETE SET NULL
definiert, während die Gebruikers_gebruiker_id
als NOT NULL
definiert ist.
Fix it (Änderung ON DELETE CASCADE
oder einfach nur die Klausel entfernen), und Sie werden in der Lage sein, den Verweis zu erstellen.
Andere Tipps
Im meinem Fall seines typischerweise wegen eines Datentyp stimmt nicht überein. Denken Sie daran, wenn es sich um eine int-Check ist, dass beide entweder unsigned oder nicht
Dieses is'nt viel eine Buggy Eigenschaft von MySQL. Dafür kann es zwei Gründe geben! 1) die Datentypen des PK und FK nicht übereinstimmen. 2) Dieser Fehler kann vor 4.1 in Versionen kommen, wo Sie müssen explizit Indizes definieren.
Ein weiterer Grund hinzu:
Verschiedene charset oder Motor wird auch dieses Problem verursachen
In meiner Person Erfahrung dieses eine sehr buggy charakteristisch für MySQL - und die am wenigsten Aufwand ist nur die Tabellenstruktur und Daten-Dump, dann die Tabelle löschen und neu starten Sie das SQL von der Müllkippe und dann manuell Indizes neu erstellen und Fremdschlüssel-Constraints, wo nötig.
Ich hatte eine Einschränkung mit dem gleichen Namen in einer anderen Tabelle. Versuchen Sie, den Namen der Einschränkung.