MySQL中一个FOREIGN列的PRIMARY和INDEX键

我使用
MySQL Workbench准备数据库布局,并使用phpMyAdmin将其导出到我的数据库.看一张桌子时,我收到了以下警告:

PRIMARY and INDEX keys should not both be set for column gid

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

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

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);

编辑我尝试在phpMyAdmin中删除gid的附加索引,它似乎工作.当更改组表中的某些内容时,仍会发生级联操作,因此我猜即即使没有索引,外部关系也是完整的.

但为什么MySQL Workbench强迫我保留该索引?只要外键在那里,我就不能手动将其删除.

最佳答案 没有错.即使它是当前表的整个主键,它仍然可能是正确的.实际上,除非你是那些只使用自动增量列作为主键的“程序员”之一,否则你会看到这个报道很多.

点赞