我使用MySQL Workbench设计我的数据库,然后导出SQL创建脚本。但是,当我运行此脚本创建数据库时,我会发现一个错误-ERRNO:121。

事实证明,MySQL Workbench给出了两个相同名称的约束,因为这两个约束都使用相同的键(我有一个带有主键'roomid'的表,并且我将此键在其他两个表中引用)。

有什么办法可以直接在设计人员中重命名约束,因此当我向设计SQL创建脚本时,它不会给出任何错误?

我尝试双击设计师中的关系,并给它一个新的字幕,但它仍然以原始名称生成脚本。

生成的脚本的一部分,该脚本会产生错误:


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

如果不存在创建表格 users.userRoles ( ... roleID int不是null,...约束 roleID外键(roleID ) 参考 users.roles (roleID ));

如果不存在创建表格 users.resourcePrivileges ( roleID int不是null,...约束 roleID外键(roleID ) 参考 users.roles (roleID ));

有帮助吗?

解决方案

不确定您是如何结束的。我乘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约束的默认名称在 模型 标签。

其他提示

错误121是由于约束名称重复。solution example通常,当使用MySQL Forward Engineering Extort选项生成SQL脚本时,为了解决问题,我们需要确保“外键名”在SQL脚本/架构中是唯一的。

当您设置外国密钥的约束时,不会分配不同表格的同一主键的其他名称。因此,要说的是,如果有任何重复,请检查所有生成的脚本中的所有索引名称。重命名为其他。那你可以继续...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top