更新:我有一张我的托管提供商 (FatCow) 的票,因为他们能够重复该问题。我将在这里发布任何结论。
我有一个像这样的 MySQL 数据库:
table || pk
-----------
performers -> pID
genres -> gID
venues -> vID
我还有一个事件表,如下所示:
eID (PK)
ePerformer (INDEX)
eGenre (INDEX)
eVenue (INDEX)
它们都是相同的类型:INT(11)
。所有表都是 InnoDB。我想使用事件表上的关系 View 在 phpMyAdmin 中设置关系,但是当我尝试保存时:
ePerformer: performers->pID ON DELETE RESTRICT, ON UPDATE RESTRICT
eGenre: genres->gID ON DELETE RESTRICT, ON UPDATE RESTRICT
etc...
我为每个字段返回此错误:未定义索引!
我想也许我是在倒退,所以我尝试从其他表中设置每个关系,但我得到了同样的错误。
什么给出了?
最佳答案
使用类似的结构我能够创建关系。您已经检查了一些明显的事情(引用键上的主键、InnoDB 等)。
当我第一次创建 events
表时,使用 phpMyAdmin 下拉列表为您指定的三个字段中的每一个选择 INDEX,它在所有三个字段上创建了一个复合索引,但该索引不起作用;我必须删除该索引并分别在每个字段上手动创建一个索引。
综合指数:
工作个体索引:
您可以尝试设计器功能(这需要您设置“phpMyAdmin configuration storage ”);我发现在操作关系时它优于关系 View 。
从events
表(我知道,您已经说过您位于正确的表中),单击“结构”选项卡,然后单击“关系 View ”链接,您应该能够执行以下操作:
在本例中,我已经通过设计器创建了 events_ibfk_1
关系,并通过关系 View 创建了 fk_venue
;该屏幕截图是在创建 fk_performer
之前拍摄的,因此您在这里看到的正是我在单击“保存”之前所做的。
不确定这是否有帮助,但我可以用您提供的内容来做到这一点...所以也许如果它仍然不起作用,您可以导出完整的现有表结构,我会尝试让它发挥作用。
无论如何,这是我正在工作的表结构的导出:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; CREATE TABLE IF NOT EXISTS `events` ( `eID` int(11) NOT NULL, `ePerformer` int(11) NOT NULL, `eGenre` int(11) NOT NULL, `eVenue` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `genres` ( `gID` int(11) NOT NULL, `g` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `performers` ( `pID` int(11) NOT NULL, `p` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE IF NOT EXISTS `venues` ( `vID` int(11) NOT NULL, `v` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `events` ADD PRIMARY KEY (`eID`), ADD KEY `i_perf` (`ePerformer`), ADD KEY `i_genre` (`eGenre`), ADD KEY `i_venue` (`eVenue`); ALTER TABLE `genres` ADD PRIMARY KEY (`gID`); ALTER TABLE `performers` ADD PRIMARY KEY (`pID`); ALTER TABLE `venues` ADD PRIMARY KEY (`vID`); ALTER TABLE `events` ADD CONSTRAINT `fk_performer` FOREIGN KEY (`ePerformer`) REFERENCES `performers` (`pID`), ADD CONSTRAINT `events_ibfk_1` FOREIGN KEY (`eGenre`) REFERENCES `genres` (`gID`), ADD CONSTRAINT `fk_venue` FOREIGN KEY (`eVenue`) REFERENCES `venues` (`vID`);
关于mysql - phpMyAdmin 抛出 No Index Defined!即使索引和 PK 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22052552/