2009-07-24 4 views
35

Ich bekomme diesen Fehler in MySQL erstellen. Ich mache:MySQL errorno 121

CREATE TABLE `blogReply` (

    `Id`  INT(24)  NOT NULL AUTO_INCREMENT COMMENT 'Primary Key of This Table', 
    `blogId` INT(24)  NOT NULL COMMENT 'Blog where this reply was posted', 
    `userId` INT(24)  NULL COMMENT 'User the blog was posted by', 
    `name` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Name of the user that the reply was posted by', 
    `email` VARCHAR(100) NULL DEFAULT 'Unknown' COMMENT 'The Email of the user that the reply was posted by', 
    `http` VARCHAR(300) NULL DEFAULT 'Unknown' COMMENT 'The Webaddress of the user that the reply was posted by', 
    `message` TEXT   NOT NULL COMMENT 'text of the blog', 
    `votes` INT(10)  DEFAULT 0 COMMENT 'Rating of the Blog', 
    `ratedBy` TEXT   COMMENT 'People who have already Voted on this blog', 
    `dateReg` BIGINT  NOT NULL COMMENT 'Date the User was Registered', 

    PRIMARY KEY (`Id`), 

    CONSTRAINT `FK_userId` FOREIGN KEY(`userId`) 
     REFERENCES `user` (`Id`) 
     ON DELETE SET NULL 
     ON UPDATE CASCADE, 

    CONSTRAINT `FK_blogId` FOREIGN KEY(`blogId`) 
     REFERENCES `blog` (`Id`) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE 

) ENGINE = InnoDB; 

Irgendwelche Ideen? Die Fehlerzustände: Can't create table './xxxxxxxx/blogReply.frm' (errno: 121)

Antwort

116

Sie sicher, dass alle Einschränkungen sind wirklich richtig buchstabiert, auch überprüfen, dass es keine anderen Tabellen, die die Einschränkung Namen FK_userId oder FK_blogId verwendet

+0

Lassen Sie mich diese Theorie testen, weil ich denke, FK_userId vorher aber in einer anderen Tabelle –

+18

Nizza, wusste nicht, dass Fremdschlüssel müssen haben eindeutige Namen durch Tabellen. Danke :) – Shade

+0

Heute habe ich diesen Fehler zum ersten Mal mit mySQL seit Jahren, jetzt. Es war wirklich ein Zufall, dass die Namen immer übereinstimmten. –

7

Fehler 121 ist ein Fremdschlüssel Einschränkungsproblem. Als Erstes müssen Sie überprüfen, ob Ihre Fremdschlüsseldefinitionen in Ordnung sind (alle Tabellen- und Feldnamen sind korrekt, usw.).

Sie können versuchen, Fremdschlüsselprüfungen zu deaktivieren, bevor Sie die Tabelle als auch, wie diese zu erstellen:

SET FOREIGN_KEY_CHECKS = 0; 

, dass die Kehrseite der Medaille zu werfen Fehler später hat, wenn Sie Ihren Schlüssel überprüft erneut aktivieren (setzen Sie ihn auf 1) Wenn dies jedoch der Fall ist, bedeutet dies, dass Sie irgendwo ungültige Datensätze haben, die die Erstellung des Fremdschlüssels stören.

Dieses Problem kann jedoch auch auftreten, wenn Sie Datenbankdateien manuell verschoben haben, z. B. das Verzeichnis data/your_database_name physisch umbenennen. InnoDB kann physische Änderungen wie diese nicht mit dem Tablespace korrelieren, so dass es mit den Interna muckt.

Wenn Sie das getan haben, ist die Lösung, die am besten funktioniert, Ihre alte Datenbank dorthin zu verschieben, wo sie war, einen Speicherauszug zu erstellen oder zu exportieren und vor dem erneuten Import eine DROP DATABASE zu machen.

+1

Nein im nicht körperlich bewegten thisgs um werden könne. Ich habe gerade eine Installationsdatei erstellt und diese mit einer neuen Kopie ausgeführt, um alle Tabellen zu erstellen –

1

überprüfen Sie bitte, dass Ihre Fremdschlüssel, die Sie erstellen in allen Aspekten gleich ist wie Datentyp mit der referenzierten Tabellenspalte. Jeder Fremdschlüsselname sollte für die Tabellen, in denen er erstellt wird, eindeutig sein. Er sollte nicht in anderen Tabellen verwendet werden. Bei dem obigen Problem sollte der fremde Schlüsselname "FK_userId" in keiner anderen Tabelle verwendet werden.

1

In ich habe dieses Problem in mysql 5.5 aber funktioniert gut in MySQL 5.6. Das Problem war, weil der Constraint-Name eindeutig sein aussieht, aber wenn dies ein langer Name ist und wird abgeschnitten, das nicht einzigartig sein, zum Beispiel:

long_constraint_name_1, long_constraint_name_2long_constraint_name_