質問

MySQLワークベンチを使用して、データベースを設計し、SQL Createスクリプトをエクスポートします。しかし、このスクリプトを実行してデータベースを作成すると、エラーが表示されます-errno:121。

MySQLワークベンチは、両方の制約が同じキーを使用しているため、2つの制約に同じ名前を与えていることがわかります(プライマリキー「役割」を備えたテーブルがあり、このキーを他の2つのテーブルで参照しています)。

設計者の制約を直接名前を変更する方法はありますか?SQL Createスクリプトをエンジニアリングすると、エラーが発生しませんか?

デザイナーの関係をダブルクリックして新しいキャプションを付けてみましたが、元の名前でスクリプトを生成しました。

エラーを作成する生成されたスクリプトの一部:


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

存在しない場合はテーブルを作成します users.userRoles ( ... roleID int not null、...制約 roleID外部キー (roleID )参照 users.roles (roleID ));

存在しない場合はテーブルを作成します users.resourcePrivileges ( roleID int not null、...制約 roleID外部キー (roleID )参照 users.roles (roleID ));

役に立ちましたか?

解決

どのようにしてそれが終わったのかわからない。 MySQLワークベンチをスピンにして、FKで2つのテーブルを作成し、作成しました

-- -----------------------------------------------------
-- 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;

制約には、テーブル名を使用しているため複製されないユニークな名前「FK_USERSROLES_USERS」があることに注意してください。楽しいために、私は同じテーブル間に別の関係を追加しました、そしてデフォルトで私は取得します

-- -----------------------------------------------------
-- 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;

これも非問題です(上記のすべてが自動生成されます - 私はテーブル名、参照テーブルの主要なキーのみを設定し、2つの1:n関係を追加しました)

注:バージョン5.2.30。

編集たぶんあなたの好みで何かが起こった。 FK制約のデフォルト名は、 モデル タブ。

他のヒント

エラー121は、制約名の複製によるものです。solution example一般に、MySQLフォワードエンジニアリングエクスポートオプションでSQLスクリプトを生成する場合、「外部キー名」がSQLスクリプト/スキーマでユニークであることを確認するために必要な問題を解決するために必要な問題を解決します。

外部キーの制約を設定した場合、テーブルの同じプライマリキーを参照する別の名前を割り当てません。したがって、言おうとしているのは、重複がある場合は、生成されたすべてのスクリプトのすべてのインデックス名を確認することです。他のいくつかに名前を変更します。それからあなたは続行することができます...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top