我使用
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强迫我保留该索引?只要外键在那里,我就不能手动将其删除.
最佳答案 没有错.即使它是当前表的整个主键,它仍然可能是正确的.实际上,除非你是那些只使用自动增量列作为主键的“程序员”之一,否则你会看到这个报道很多.