Frage

verwende ich MySQL Workbench meine Datenbank zu entwerfen und dann die SQL exportieren Skript erstellen. Aber wenn ich dieses Skript ausführen, um die Datenbank zu erstellen, bekomme ich einen Fehler - errno: 121

Es stellt sich heraus, dass MySQL Workbench gibt zwei Einschränkungen die gleichen Namen, weil beide Zwänge den gleichen Schlüssel verwenden (Ich habe eine Tabelle mit Primärschlüssel ‚Rollen-ID‘ und ich verweise auf diesen Schlüssel in zwei anderen Tabellen).

Gibt es eine Möglichkeit, wie ich die Einschränkung direkt im Designer umbenennen kann, so dass, wenn ich dich die SQL-Ingenieur-Skript erstellt hat, wird es keine Fehler geben?

Ich habe versucht, einen Doppelklick auf die Beziehung im Designer und geben ihm einen neuen Titel, aber es erzeugt noch das Skript mit dem ursprünglichen Namen.

Ein Teil des erzeugten Skript, das den Fehler erzeugt:


CREATE  TABLE IF NOT EXISTS users.roles (
  roleID INT NOT NULL AUTO_INCREMENT ,
  ...
  PRIMARY KEY (roleID) ,
  ...);

CREATE TABLE IF NOT EXISTS users.userRoles ( ... roleID INT NOT NULL , ... CONSTRAINT roleID FOREIGN KEY (roleID ) REFERENCES users.roles (roleID ));

CREATE TABLE IF NOT EXISTS users.resourcePrivileges ( roleID INT NOT NULL , ... CONSTRAINT roleID FOREIGN KEY (roleID ) REFERENCES users.roles (roleID ));

War es hilfreich?

Lösung

Nicht sicher, wie Sie mit, dass am Ende. Ich habe MySQL Workbench für einen Spin, erstellt zwei Tabellen mit einer FK und es erstellt

-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`users` (
  `idusers` INT NULL ,
  PRIMARY KEY (`idusers`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Beachten Sie, dass die Beschränkung hat einen eindeutigen Namen ‚fk_usersRoles_users‘, die nicht kopiert bekommen würde, da es Tabellennamen verwendet. Just for fun habe ich eine andere Beziehung zwischen den gleichen Tabellen und standardmäßig I

erhalten
-- -----------------------------------------------------
-- Table `mydb`.`usersRoles`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`usersRoles` (
  `users_idusers` INT NOT NULL ,
  `users_idusers1` INT NOT NULL ,
  PRIMARY KEY (`users_idusers`, `users_idusers1`) ,
  INDEX `fk_usersRoles_users1` (`users_idusers1` ASC) ,
  CONSTRAINT `fk_usersRoles_users`
    FOREIGN KEY (`users_idusers` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_usersRoles_users1`
    FOREIGN KEY (`users_idusers1` )
    REFERENCES `mydb`.`users` (`idusers` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Welche wieder ein nicht Problem ist (alle oben wird automatisch generiert - ich nur die Tabellennamen festgelegt haben, Primärschlüssel auf referenzierte Tabelle und fügte zwei 1: N-Beziehungen)

. Hinweise: Version 5.2.30

Bearbeiten Vielleicht geschah etwas mit Ihren Wünschen. Der Standardname für die fk Constraints definiert auf dem Modell Tab.

Andere Tipps

Fehler 121 ist aufgrund Constraintname Vervielfältigung Im Allgemeinen, wenn Ihren SQL-Skript mit MYSQL Forward-Engineering-Exportoption zu erzeugen, das Problem, das wir gerade noch auflösen müssen, um sicherzustellen, dass der „Foreign Key Names“ ist einzigartig in SQL-Skript / schema.

Wenn Sie eine Beschränkungen für Fremdschlüssel gesetzt ist, wird nicht assign anderen Namen, dass gleichen Primärschlüssel einiger Tabelle. Also, was ich versuche zu sagen ist, dass der Check alle Indexnamen in allen generierten Skripte, ob es eine Verdoppelung. Benennen Sie zu einem anderen. Dann können Sie gehen ...

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