mysql创建外键约束的语法workbench_使用MySQL Workbench在已编制索引的列上创建外键...

在使用MySQL Workbench创建数据库模型时,发现在已存在主键和唯一索引的列上添加外键约束后,工作台自动生成了额外的索引。根据MySQL参考手册,由于主键和唯一索引的存在,这些额外索引似乎是冗余的。但工作台不允许删除它们。问题讨论了如何在不创建冗余索引的情况下定义外键约束,并提出了修改模型和索引类型的方法。
摘要由CSDN通过智能技术生成

我正在使用Workbench创建数据库模型并创建下表:

CREATE TABLE IF NOT EXISTS `Database`.`table1` (

`idtable1` INT NOT NULL ,

`uniquecolumn` INT NOT NULL ,

PRIMARY KEY (`idtable1`) ,

UNIQUE INDEX `UniqueIndex` (`uniquecolumn` ASC) )

ENGINE = InnoDB

它有一个主键,在我的第二列上有一个唯一键.

当我在它们上创建外键约束时,Workbench会自动添加两个索引:

CREATE TABLE IF NOT EXISTS `Database`.`table1` (

`idtable1` INT NOT NULL ,

`uniquecolumn` INT NOT NULL ,

PRIMARY KEY (`idtable1`) ,

UNIQUE INDEX `UniqueIndex` (`uniquecolumn` ASC) ,

INDEX `FKOne` (`idtable1` ASC) , //here

INDEX `FKTwo` (`uniquecolumn` ASC) , //(I don't want this!)

CONSTRAINT `FKOne`

FOREIGN KEY (`idtable1` )

REFERENCES `Database`.`table2` (`idtable2` )

ON DELETE CASCADE

ON UPDATE CASCADE,

CONSTRAINT `FKTwo`

FOREIGN KEY (`uniquecolumn` )

REFERENCES `Database`.`table2` (`idtable2` )

ON DELETE CASCADE

ON UPDATE CASCADE)

ENGINE = InnoDB

(以上是将外键添加到我的模型后的正向设计脚本)

我现在有四个索引.

这就是MySQL参考手册所说的:

In the referencing table, there must be an index where the foreign key

columns are listed as the first columns in the same order. Such an

index is created on the referencing table automatically if it does not

exist.

所以我理解不需要创建索引FKOne和FKTwo,因为在相同的列上已经有相同顺序的主键和唯一索引.然而,MySQL Workbench不允许我删除索引FKOne和FKTwo.我想我应该能够做到这一点:

CREATE TABLE IF NOT EXISTS `Database`.`table1` (

`idtable1` INT NOT NULL ,

`uniquecolumn` INT NOT NULL ,

PRIMARY KEY (`idtable1`) ,

UNIQUE INDEX `UniqueIndex` (`uniquecolumn` ASC) ,

CONSTRAINT `FKOne`

FOREIGN KEY (`idtable1` )

REFERENCES `Database`.`table2` (`idtable2` )

ON DELETE CASCADE

ON UPDATE CASCADE,

CONSTRAINT `FKTwo`

FOREIGN KEY (`uniquecolumn` )

REFERENCES `Database`.`table2` (`idtable2` )

ON DELETE CASCADE

ON UPDATE CASCADE)

ENGINE = InnoDB

我对吗?这段代码有用吗?有没有办法用Workbench做到这一点? (除了在前向工程之前的最后一刻删除这两行).

或者MySQL可能足够智能,不会创建完全冗余的索引,我不必担心它……?

最佳答案 (我假设这是在定义模型时.)

请参阅Bug 53277,其中我提到了以下模糊的解决方法:

您可以从外键及其要删除的相应生成索引开始.确保密钥(至少暂时)在单个非唯一列上.在“索引”选项卡中,将“类型”更改为“UNIQUE”.然后转到Columns选项卡,现在检查UQ,并取消选中它.消除了不需要的索引!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值