2009-08-20 12 views
3

Ok, also erstelle ich Tabellen in MySQL mit Indizes und Fremdschlüsseln. Ich benutze MySQL Workbench, um die Tabellen zu erstellen, und lasse sie dann ein SQL-Erstellungsskript entwickeln (ich mache es besser in einer visuellen DB-Umgebung, als den SQL-Code direkt von Hand zu schreiben).MySQL Create Tabelle mit Indizes Fehler

Das Problem oft ist, wenn ich das SQL-Skript in MySQL importieren, erhalte ich die klassische eror: in der Regel Index/Fremdschlüssel im Zusammenhang

#1005 - Can't create table 'db.tablename' (errno: 121) 

Ich habe es geschafft, das Problem jedes Mal, um herauszufinden, Aber jetzt ärgere ich mich, dass ich es jedes Mal reparieren muss. Ich verstehe nicht wirklich, was das Problem ist (besonders wenn ein MySQL-Produkt SQL-Code für seine eigene Datenbank erstellt). Unten ist ein Code, der das Problem normalerweise verursacht.

CREATE TABLE IF NOT EXISTS `db`.`groupMembers` (
    `groupMembersID` INT NOT NULL AUTO_INCREMENT , 
    `groupID` INT NOT NULL , 
    `userID` INT NULL , 
    PRIMARY KEY (`groupMembersID`) , 
    INDEX `group` (`groupID` ASC) , 
    INDEX `user` (`userID` ASC) , 
    CONSTRAINT `group` 
    FOREIGN KEY (`groupID`) 
    REFERENCES `db`.`groups` (`groupsID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `user` 
    FOREIGN KEY (`userID`) 
    REFERENCES `db`.`users` (`usersID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

Der Fehler kommt in der Regel aus der ersten Definition INDEX - auch wenn ich den Index Definition nehmen, bekomme ich nur den Fehler in der ersten Fremdschlüssel Definition. Ich habe überprüft, und die Fremdschlüssel-Remote-Spalte und die lokale Spalte haben denselben Datentyp und dieselbe Größe.

Antwort

4

„errno 121 bedeutet einen doppelten Schlüsselfehler“

Constraints müssen einen eindeutigen Namen in der Datenbank haben, können Sie wollen Ihren Namen FK ändern. So, FK_groupMembers_group und FK_groupMembers_user.

+0

Danke - Ich habe alle meine Fremdschlüssel, Indexnamen geändert und das die Fehler behoben. Gilt dies auch für Indexnamen oder sind sie nur tabellenspezifisch? –

+0

Ja, es muss jede Entität (Index, Tabelle usw.) in der gesamten Datenbank eindeutig sein). – Fabian