65

phpMyAdmin 中产生的错误是:

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

此错误消息是什么意思,我该如何解决?

4

17 回答 17

51

我一直面临这个问题。

原因是您的表没有主键字段

我有一个简单的解决方案:将一个字段设置为主键到适合您的业务逻辑的特定字段。

例如,我有数据库thesis_db和字段thesis_id,我将按下按钮 Primary(键图标)设置thesis_id为主键字段:

在此处输入图像描述

于 2014-12-13T04:26:26.927 回答
23

这不是错误。PhpMyAdmin 只是通知您,您的结果集中没有唯一的 ID 列。根据您发送的查询类型,这是所需的行为。

不是 MySQL 说它需要唯一 ID,如果结果集中的列的任何组合是唯一的,则这些列的值可以在 UPDATE 或 DELETE 查询中使用。phpMyAdmin 表示它没有足够的信息来为您提供您通常会在具有唯一 ID 的结果集中看到的复选框和按钮。

于 2013-12-23T14:42:34.233 回答
15

只需创建一个新列,将 设置Name为您喜欢的任何内容,设置TypeINT选中显示的框A_I

图表A_I复选框代表AUTO_INCREMENT,这实质上意味着在该新列中自动分配序列号(见下文)。

 column1 | column2 | id
-----------------------
 value   | value   | 1
-----------------------
 value   | value   | 2
-----------------------
 value   | value   | 3
-----------------------
 value   | value   | 4

此列本质上充当 phpMyAdmin 从中删除行的参考。如有必要,请单击此新列的唯一按钮,尽管这对我来说是自动发生的。完成上述步骤后,您应该不再有错误消息,并且应该出现用于在 phpMyAdmin 中编辑行的按钮!

于 2016-07-27T17:24:47.953 回答
13

我的情况不同。此问题仅特定于 PHPMyAdmin。我下载了其他几个管理工具(Adminer、MySQLWorkbench、HeidiSQL 等),相同的数据库在所有这些工具中都可以正常工作。

我定义了所有索引、主键和唯一键,但仍然出现错误。我升级到 MySQL 5.6 后得到了这个(与以前的版本不同)。

原来 PMA 在大写表名方面存在问题。PMA 无法识别具有大写表名的键。一旦我将它们更改为小(ALTER TABLE mytable ENGINE=INNODB-- 我使用 INNODB -- 对每个表都这样做而不更改任何其他内容),我就能够正常访问。我在带有 UniformServer 的 Windows 系统上。

于 2016-06-26T19:02:36.493 回答
4

这就是您摆脱该通知并能够打开这些网格单元进行编辑的方式

1) 点击“结构”

2)转到您想成为主键的字段(这通常是第一个),然后单击该字段的“PRIMARY”和“INDEX”字段并接受PHPMyadmin的弹出问题“OK”。

3) 把自己垫在后面。

于 2018-12-25T21:00:05.860 回答
3

一个简单的解决方法是转到 SQL 选项卡,只需简单地输入代码

ALTER TABLE `tablename`
ADD PRIMARY KEY (`id`);

假设您有一个名为 id 的行。

于 2016-11-17T13:00:21.503 回答
2

在文件中添加这个config.inc.php对我有用(在最后一行 $cfg 下):

$cfg['RowActionLinksWithoutUnique'] = 'true';

该文件应位于phpMyAdmin本地计算机上的文件夹中

于 2019-03-22T08:54:57.113 回答
2

我一直面临这个问题。

原因是您的表没有主键字段。

我有一个简单的解决方案:将一个字段设置为主键,以适合您的业务逻辑的特定字段。例如,我有数据库 thesis_db 和字段 thesis_id,我将按下按钮 Primary(键图标)将 thesis_id 设置为主键字段

于 2019-09-17T07:26:25.283 回答
1

在我的情况下,当我设置 lower_case_table_names = 2 并且表名带有大写字符时,phpmyadmin 版本 4.5.1 中发生了错误,该表的主键设置为自动递增,但仍然显示错误。当我将表名更改为全小写时,问题停止了。

于 2017-03-06T09:59:23.573 回答
1

这肯定是一个老话题,但我想补充一些声音,也许是新的想法。要解决讨论中的 WARNING 问题,您需要做的就是将表列之一设置为 PRIMARY KEY 约束。

于 2020-08-21T22:41:02.540 回答
0

在运行 Query 后尝试直接修改时出现此错误。事实证明,在从完全相同的查询中查看视图后,我能够修改这些值。

于 2015-03-26T20:29:51.573 回答
0

This question helped me identify the problem of why phpMyAdmin refused me grid-edit-etc. on some tables. I just had forgotten to declare my primary key and was overseeing it in my "Why the hell should this table be different from its neighbours" solution search process...

I just wanted to react on following in OP self-answer:

The other table had multiple AI int values that were the Primary field, but there were multiple values of the same kind.

The simple fix for this was to just add a column to the end of the table as Unique AI Int. Basically all MySQL is saying is it needs a unique value in each record to differentiate the rows.

This was actually my case, but there's absolutely no need to add any column: if your primary key is the combination of 2 fields (ex. junction table in many to many relationship), then simply declare it as such:
- eiter in phpyAdmin, just enter "2" in "Create an index on [x] columns", then select your 2 columns
- or ALTER TABLE mytable ADD PRIMARY KEY(mycol1,mycol2)

于 2015-02-26T20:44:16.070 回答
0

我最近遇到了同样的问题,在查找重复项后,我可以通过在表上设置(丢失)主键来修复它。希望这可以帮助

于 2014-11-03T09:04:38.620 回答
0

这对我来说是通过从原始源数据库重新导出数据然后将其导入镜像数据库来解决的。

于 2018-11-23T10:25:06.703 回答
0

确保所有表都有一个主键。我忘记向一个表添加主键,这为我解决了这个问题。:)

于 2019-05-11T20:07:19.027 回答
0

每当我使用特定列触发 SELECT 查询时,我都会遇到同样的问题,尽管其中一列是表中的主要列。我试图在标准的 wordpress“帖子”表中获取具有选择性列的选择性记录。ID 列已经是主要且唯一的..

仅指定主/唯一列名将无法解决此问题。您必须指定完整的列名,例如“posts.id”(tablename.columnname),它告诉 PMA 选择特定列并显示编辑等。

我的 PMA 是 4.3.8。让我知道这是否有帮助..

于 2017-03-27T02:25:17.377 回答
0

对我有用的代码

ALTER TABLE `table name`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
于 2018-11-09T10:55:41.263 回答