此表不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用,2020

Posted

技术标签:

【中文标题】此表不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用,2020【英文标题】:This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available, 2020 【发布时间】:2021-03-16 19:51:53 【问题描述】:

为什么 phpMyAdmin 在从仅以小写(和下划线)命名且 确实 具有(单列)主键的表中选择时给我这个警告,并且缺少功能?我在看到this后检查了这些元素

具体我的查询是

SELECT su.* FROM `r8u2d_comps_testsubitem` su 
JOIN `r8u2d_comps_testitem` ti ON ti.id=su.testitemid 
JOIN `r8u2d_comps_test` t ON ti.testid=t.id 
WHERE t.id=241
ORDER BY ti.ordering

别名为“su”的表有一个列“id”(int(11),autoincrement)和一个仅使用该字段的主键。在我看来,这个查询避免了listed in this answer 的所有限制,那么问题是什么?是 phpMyAdmin(我的托管公司有 4.7.9,但我在本地使用 5.0.4 遇到了同样的问题)还是 mysql(主机有 5.7.29-0ubuntu0.16.04.1 -(Ubuntu),我有 10.4.17-MariaDB - MariaDB 服务器,我想不能严格比较)。

表结构

`id`            INT NOT     NULL AUTO_INCREMENT, 
`testitemid`    INT NOT     NULL
`marker`        CHAR(20)    NULL
`text`          TEXT        NOT NULL,
`ordering`      TINYINT     NOT NULL,
PRIMARY KEY (`id`),
KEY `testitemid` (`testitemid`),
KEY `ordering` (`ordering`),
CONSTRAINT `subelementToElement` 
    FOREIGN KEY (`testitemid`) REFERENCES `#__comps_testitem`(`id`) 
        ON DELETE CASCADE 
        ON UPDATE NO ACTION

【问题讨论】:

请与我们分享您的表格结构。还有一点很重要:MySQL 与 MariaDB 并不完全相同!!! 结构已添加。在这方面,MySQL 和 MariaDB 似乎(就我的问题而言足够)是相同的,因为我在两个平台上都分别收到了这个错误 【参考方案1】:

phpMyAdmin 努力使用主键/唯一键来启用网格编辑,但是当与多个 JOIN 语句一起使用时,检测逻辑并不能很好地支持。 phpMyAdmin 解析器很难通过一些查询向后工作并确定哪些列来自哪些表以及是否有可用于编辑数据的主键。我想警告消息最好写成“此表或查询不包含唯一列,或者您的查询是一个连接,它充分混淆了原始表结构,我们不想冒险损坏您的数据。”

不幸的是,除了有人重写 phpMyAdmin 的这一部分之外,我现在推荐的最佳解决方案是通过 JOIN 查询找到要修改的数据,然后打开该单独的表并滚动浏览视图以(或使用搜索以直接从表中查找)要修改的行。

【讨论】:

感谢@Isaac。我认为这可能是问题所在,因为仅从表中进行的选择确实识别了密钥。我希望 phpMyAdmin 在这种情况下会“做得更好”,因为字段选择完全来自一个表......哦,好吧。虽然非常感谢您的回答,但我对将其标记为解决方案感到矛盾:/

以上是关于此表不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用,2020的主要内容,如果未能解决你的问题,请参考以下文章

当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用

phpmyadmin 此表不包含唯一列[重复]

PHPMyAdmin 4.0.5 - 网格编辑,复选框,编辑,复制和删除功能不可用

PHPMyAdmin 4.0.5 - 网格编辑、复选框、编辑、复制和删除功能不可用

phpmyadmin:从多个表创建的视图现在 id 字段不是唯一的,无法编辑,更新删除

迁移数据库 phpmyadmin 的问题