gpt4 book ai didi

MySQL Workbench 重命名约束

转载 作者:行者123 更新时间:2023-11-29 03:13:35 25 4
gpt4 key购买 nike

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

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

有什么办法可以直接在设计器中重命名约束,这样当我对 SQL CREATE 脚本进行正向工程时,它就不会出错吗?

我试着双击设计器中的关系并给它一个新的标题,但它仍然生成具有原始名称的脚本。

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


CREATE TABLE IF NOT EXISTS <code>users</code>.<code>roles</code> (
<code>roleID</code> INT NOT NULL AUTO_INCREMENT ,
...
PRIMARY KEY (<code>roleID</code>) ,
...);<p></p>

<p>CREATE TABLE IF NOT EXISTS <code>users</code>.<code>userRoles</code> (
...
<code>roleID</code> INT NOT NULL ,
...
CONSTRAINT <code>roleID</code>
FOREIGN KEY (<code>roleID</code> )
REFERENCES <code>users</code>.<code>roles</code> (<code>roleID</code> ));</p>

<p>CREATE TABLE IF NOT EXISTS <code>users</code>.<code>resourcePrivileges</code> (
<code>roleID</code> INT NOT NULL ,
...
CONSTRAINT <code>roleID</code>
FOREIGN KEY (<code>roleID</code> )
REFERENCES <code>users</code>.<code>roles</code> (<code>roleID</code> ));
</p>

最佳答案

不确定你是如何结束的。我试了一下 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 上定义标签。

关于MySQL Workbench 重命名约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4333053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com