phpMyAdmin抛出没有索引定义!即使索引和PK存在

时间:2014-02-26 20:29:11

标签: mysql phpmyadmin relational-database

更新:我有一张进入我的托管服务提供商(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!

我想也许我正在倒退,所以我尝试从其他表中设置每个关系,但我得到了同样的错误。

是什么给出了?

1 个答案:

答案 0 :(得分:1)

使用类似的结构我能够创建关系。您已经检查过几个明显的事情(引用键上的主键,InnoDB等)。

当我第一次创建events表时,使用phpMyAdmin下拉列表为您指定的三个字段中的每个字段选择INDEX,它在所有三个字段上创建了一个复合索引,但这不起作用;我不得不删除该索引,并在每个字段上单独手动创建一个INDEX。

综合指数: The composite index that doesn't work

工作人员指数:

Individual indexes that do work

您可以尝试使用Designer功能(要求您设置“phpMyAdmin configuration storage”);在操纵关系时,我发现它优于关系视图。

events表(我知道,你已经说过你在正确的桌子上),单击Structure选项卡,然后单击Relation View链接,你应该可以这样做:

Relation view example

在这种情况下,我已经通过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`);