Frage

Ok, so dass ich die Erstellung von Tabellen in MySQL mit Indizes und Fremdschlüssel. Ich benutze MySQL Workbench, die Tabellen zu erstellen und dann haben sie mich darauf, ein SQL-Skript erstellen Ingenieur (ich besser machen in einer visuellen DB-Umgebung als nur den SQL-Code von Hand auszuschreiben sofort).

Das Problem ist oft, wenn ich den SQL-Skript in MySQL importieren, erhalte ich die klassische eror:

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

Ich habe es geschaffen, das Problem jedes Mal, um herauszufinden, in der Regel Index / Fremdschlüssel verwendet, aber jetzt an Ich fange gereizt zu bekommen, die sie jedes Mal zu beheben. Ich verstehe wirklich nicht, was das Problem ist (vor allem, wenn ein MySQL-Produkt SQL-Code für seine eigene Datenbank erstellen). Nachfolgend finden Sie einige Code, der normalerweise das Problem 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 von der ersten INDEX Definition - 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 entfernte Spalte und die lokalen Spalt sind die gleiche Datentyp und Größe.

War es hilfreich?

Lösung

"errno 121 bedeutet einen doppelten Schlüsselfehler"

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top