首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中一个外来列的主键和索引键

MySQL中一个外来列的主键和索引键
EN

Stack Overflow用户
提问于 2010-01-20 09:58:37
回答 2查看 1.6K关注 0票数 4

我使用MySQL工作台准备数据库布局,并使用phpMyAdmin将其导出到数据库。在查看一张表时,我收到了以下警告:

不应同时为列gid设置主键和索引键

gid是一个外部索引,它是不同表的主键,也是当前表的主键的一部分。所以我把它作为主键的一部分,Workbench为外键条目创建了一个索引。那么,为什么会出现这种警告,我应该忽略它,还是应该重新考虑我的数据库布局呢?

这是一个非常简单的使用结构示例,它生成警告:

代码语言:javascript
复制
CREATE  TABLE IF NOT EXISTS `test_groups` (
  `gid` INT NOT NULL ,
  `gname` VARCHAR(45) NULL ,
  PRIMARY KEY (`gid`) );

CREATE  TABLE IF NOT EXISTS `test_users` (
  `gid` INT NOT NULL ,
  `uid` INT NOT NULL ,
  `name` VARCHAR(45) NULL ,
  PRIMARY KEY (`gid`, `uid`) ,
  INDEX `gid` (`gid` ASC) ,
  CONSTRAINT `gid`
    FOREIGN KEY (`gid` )
    REFERENCES `test_groups` (`gid` )
    ON DELETE CASCADE
    ON UPDATE CASCADE);

编辑I尝试删除phpMyAdmin中gid的附加索引,它似乎有效。当更改组表中的某些内容时,级联操作仍然会发生,所以我想即使没有索引,外部关系也是完整的。

但是为什么MySQL工作台强迫我保留这个索引呢?只要外键在那里,我就不能手动移除它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-20 12:16:53

我现在解决了那个问题。在我的服务器上,默认的数据库存储引擎似乎被设置为MyISAM,所以由于我没有明确地指定它,所以所有的外键关系都被丢弃了(尽管没有这么说)。在将其转换为InnoDB后,我不再收到警告,因此似乎一切都正常工作。

但是,在这种特殊情况下,我将坚持使用MyISAM,并且暂时不使用外键关系,因为我希望自动增加多键中的第二个属性(这是InnoDB不支持的),对于这个应用程序来说,这比拥有外键更有用(特别是当数据中很少进行更新和删除时)。

另外,关于MySQL工作台,这种行为似乎仍然有点错误,而且已经是已报告了。

票数 0
EN

Stack Overflow用户

发布于 2010-01-20 11:40:22

没什么不对的。即使它是当前表的整个主键,它仍然可能是正确的。实际上,除非您是那些只对主键使用自动增量列的“程序员”之一,否则您将看到大量的报告。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2100424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档