mysql - phpMyAdmin 抛出 No Index Defined!即使索引和 PK 存在

标签 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。我想使用事件表上的关系 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,它在所有三个字段上创建了一个复合索引,但该索引不起作用;我必须删除该索引并分别在每个字段上手动创建一个索引。

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

工作个体索引:

Individual indexes that do work

您可以尝试设计器功能(这需要您设置“phpMyAdmin configuration storage ”);我发现在操作关系时它优于关系 View 。

events表(我知道,您已经说过您位于正确的表中),单击“结构”选项卡,然后单击“关系 View ”链接,您应该能够执行以下操作:

Relation view example

在本例中,我已经通过设计器创建了 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/

相关文章:

mysql - SQL - 搜索表记录中不存在的日期时间段

mysql - SQL_BIG_SELECTS 错误

mysql - 有没有办法为mysql中的每个表输入描述?

mysql - 有没有办法优化 MYSQL 中的 `SHOW DATABASES` 查询

mysql查询帮助,使用来自另一个表的关系id从表中获取值

php - mysql设计用于在 friend 之间共享内容

python - Django 模型的默认值没有出现在 SQL 中

mysql - AWS Aurora Serverless - 通信链路故障

mysql - MYISAM 分片与使用 InnoDB

mysql - Yii2 GridView只显示相关记录