質問
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制約のデフォルト名は、 モデル タブ。