更新:我有一张进入我的托管服务提供商(FatCow)的票,因为他们可以复制该问题。我会在这里发表任何结论。
我有一个像这样的MySQL数据库:
table || pk
-----------
performers -> pID
genres -> gID
venues -> vID
我还有一个事件表,看起来像这样:
eID (PK)
ePerformer (INDEX)
eGenre (INDEX)
eVenue (INDEX)
它们的类型相同:INT(11)
。所有表格都是InnoDB
。我想使用事件表上的关系视图在phpMyAdmin
中设置关系,但是当我尝试保存时:
ePerformer: performers->pID ON DELETE RESTRICT, ON UPDATE RESTRICT
eGenre: genres->gID ON DELETE RESTRICT, ON UPDATE RESTRICT
etc...
我为每个字段收到此错误:No index defined!
我想也许我正在倒退,所以我尝试从其他表中设置每个关系,但我得到了同样的错误。
是什么给出了?
答案 0 :(得分:1)
使用类似的结构我能够创建关系。您已经检查过几个明显的事情(引用键上的主键,InnoDB等)。
当我第一次创建events
表时,使用phpMyAdmin下拉列表为您指定的三个字段中的每个字段选择INDEX,它在所有三个字段上创建了一个复合索引,但这不起作用;我不得不删除该索引,并在每个字段上单独手动创建一个INDEX。
综合指数:
工作人员指数:
您可以尝试使用Designer功能(要求您设置“phpMyAdmin configuration storage”);在操纵关系时,我发现它优于关系视图。
从events
表(我知道,你已经说过你在正确的桌子上),单击Structure选项卡,然后单击Relation View链接,你应该可以这样做:
在这种情况下,我已经通过Designer和events_ibfk_1
通过Relation 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`);