MySQL Workbench重命名约束

时间:2010-12-02 08:28:35

标签: mysql mysql-workbench

我使用MySQL Workbench设计我的数据库,然后导出SQL CREATE脚本。但是当我运行这个脚本来创建数据库时,我收到一个错误 - 错误:121。

事实证明,MySQL Workbench给出了两个相同名称的约束,因为两个约束都使用相同的密钥(我有一个主键为'roleID'的表,我在另外两个表中引用了这个键)。

有什么方法可以直接在设计器中重命名约束,所以当我转发SQL CREATE脚本时,它会没有错误吗?

我尝试双击设计器中的关系并为其添加一个新标题,但它仍然会生成带有原始名称的脚本。

生成错误的部分生成脚本:


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

3 个答案:

答案 0 :(得分:2)

不确定你是如何结束的。我使用MySQL WorkBench进行旋转,使用FK创建了两个表并创建了

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

这也是一个非问题(以上所有都是自动生成的 - 我只设置了表名,引用表上的主键并添加了两个1:N关系)

注意:版本5.2.30。

修改 也许你的喜好发生了什么事。 fk约束的默认名称在model选项卡上定义。

答案 1 :(得分:0)

错误121是由于约束名称重复造成的。solution example 通常在使用MYSQL正向工程导出选项生成SQL脚本时,要解决此问题,我们需要确保"外键名称"在SQL脚本/架构中是唯一的。

答案 2 :(得分:-1)

为外键设置约束时,不会指定引用某些表的相同主键的不同名称。所以,我想说的是,如果有任何重复,请检查所有生成的脚本中的所有索引名称。重命名为其他人。然后你可以继续......