题
我使用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约束的默认名称在 模型 标签。
不隶属于 StackOverflow