mysql - 此表不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用,2020
问题描述
为什么 phpMyAdmin 在从仅以小写(和下划线)命名且确实具有(单列)主键的表中选择时给我这个警告,并且缺少功能?看到这个后我检查了这些元素
具体来说,我的查询是
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)和一个仅使用该字段的主键。在我看来,这个查询避免了这个答案中列出的所有限制,那么问题是什么?是 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
解决方案
phpMyAdmin 努力使用主键/唯一键来启用网格编辑,但是当与多个 JOIN 语句一起使用时,检测逻辑并不能很好地支持。phpMyAdmin 解析器很难通过一些查询向后工作,并确定哪些列来自哪些表以及是否存在可用于编辑数据的主键。我想警告消息最好写成“此表或查询不包含唯一列,或者您的查询是一个连接,它混淆了原始表结构,以至于我们不想冒险损坏您的数据。”
不幸的是,除了有人重写 phpMyAdmin 的这一部分之外,我现在推荐的最佳解决方案是通过 JOIN 查询找到要修改的数据,然后打开该单独的表并滚动浏览视图(或使用搜索查找) 您希望直接从表中修改的行。
推荐阅读
- c# - URI 将控制符号编码为绝对路径
- python-3.x - 安装 mahotas 的 Pip 问题
- javascript - Playwright 中的 GPDR cookie 弹出窗口
- android - Cordova 9,如何将整个目录从插件复制到 res 或 src?
- ruby-on-rails-5 - Rails 升级版本时出现问题
- android-security - LIAPP 是 Dexguard 的良好替代品吗
- javascript - 当宽度固定或 100% 时,JQuery Nice-Select 的选定文本溢出下拉列表
- r - 如何将这两个“for 循环”转换为 R 中的“foreach 循环”以获得相同的结果?
- firebase - Unity 中的 Firebase 动态链接
- angular - 角度仪表板网格