nicht erstellen Ich versuche, zwei Tabellen in der MySQL-Datenbank namens class_members
und history
zu erstellen. Die class_members
Tabelle enthält Informationen über die Mitglieder und erstellt als:MySQL Foreign Key Fehler: Kann Tabelle
CREATE TABLE `class_members` (
`id` int(11) NOT NULL,
`username` varchar(65) NOT NULL DEFAULT '',
`password` varchar(65) NOT NULL DEFAULT '',
`email` varchar(65) NOT NULL,
`mod_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `username_UNIQUE` (`username`),
UNIQUE KEY `id_UNIQUE` (`id`),
UNIQUE KEY `email_UNIQUE` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Die class_members
Tabellen erfolgreich erstellt.
Ich bin vor das Problem, wenn history
Tabelle erstellt, die foreign key
Bezug auf class_members
enthält.
Der Befehl, den ich ist wie folgt verwendet:
CREATE TABLE `History` (
`history_id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(65) NOT NULL DEFAULT '',
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` VARCHAR(20) NOT NULL,
PRIMARY KEY (`history_id`),
CONSTRAINT `fk_history_member` FOREIGN KEY (`username`)
REFERENCES `class_members` (`username`)
ON UPDATE CASCADE);
Wenn ich den obigen Befehl ausführen bekomme ich diesen Fehler:
ERROR 1005 (HY000): Can't create table 'testDB.History' (errno: 150)
Ich habe versucht zu finden, warum ich nicht die History
Tabelle lesen (about ERROR 1005) aber ich kann nicht verstehen warum
Im Anschluss an Kommentare habe ich eine neue Datenbank erstellt und versucht, mit dem obigen Befehl zu erstellen, und ich bekomme immer noch den Fehler. Siehe Pic Befestigt
Aktualisiert (Gelöst)
fand ich, warum der Fehler im obigen Screenshot auftritt. Um das zu lösen, müssen wir ENGINE=InnoDB DEFAULT CHARSET=utf8
am Ende des Erstellungsbefehls für die Protokolltabelle hinzufügen.
CREATE TABLE `History` (
`history_id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(65) NOT NULL DEFAULT '',
`timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`ip` VARCHAR(20) NOT NULL,
PRIMARY KEY (`history_id`),
CONSTRAINT `fk_history_member` FOREIGN KEY (`username`)
REFERENCES `class_members` (`username`)
ON UPDATE CASCADE)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Dies funktioniert perfekt.
Habe ich das gerade referenziert? Würde mich freuen, wenn Sie helfen könnten, statt zu versuchen, Punkte zu bekommen –
Ich bin mir nicht sicher, wie ich Punkte für die Kennzeichnung als Duplikat bekomme? Wenn diese Beiträge Ihnen helfen, hilft es oder denke ich falsch? Aber es scheint, dass der gezielte Beitrag mehr oder weniger ein Duplikat aus dem Beitrag ist, auf den Sie verwiesen haben. – Ivar
Ich habe gegooglet und lese alle diese und ich bin immer noch nicht in der Lage, das Problem zu lösen, weshalb ich dachte, die Frage zu stellen. Vielleicht ist meine Syntax falsch oder ich habe einige Konzepte auf Fremdschlüssel verpasst. Deshalb habe ich versucht, den Befehl –