解决方案:此表不包含唯一列。网格编辑,复选框,编辑,复制和删除功能不可用

时间:2013-09-20 17:25:07

标签: php mysql database phpmyadmin

这不是一个问题,而是我发现的自生问题/问题和解决方案。我认为分享会很体面,因为我找不到一个完整的工作解决方案。

phpMyAdmin中生成的错误是:

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

根据您的具体情况,有几种可行的解决方案。

例如,只要您的所有AI或唯一标识符字段都是唯一的,您就可以简单地更改表并确保这是主键并设置为唯一值。

我在我的一张桌子上用这个解决方案解决了这个问题。

另一个表有多个AI int值,它们是Primary字段,但是有多个相同类型的值。

对此的简单修复是将一列添加到表的末尾,作为Unique AI Int。基本上所有的MySQL都说它需要在每条记录中使用唯一值来区分行。

希望这有用。

17 个答案:

答案 0 :(得分:35)

我遇到过这个问题。

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

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

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

enter image description here

答案 1 :(得分:20)

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

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

答案 2 :(得分:12)

我的情况有所不同。此问题仅适用于PHPMyAdmin。我下载了其他几个管理工具(Adminer,MySQLWorkbench,HeidiSQL等),同样的数据库在所有这些工作中都运行良好。

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

结果PMA在资本中存在表名称问题。 PMA无法识别具有大写表名称的密钥。一旦我将它们更改为小(ALTER TABLE mytable ENGINE=INNODB - 我使用INNODB - 为每个表执行此操作而不更改任何其他内容),我能够正常访问。我在使用UniformServer的Windows系统上。

答案 3 :(得分:11)

只需创建一个新列,将Name设置为您喜欢的内容,将Type设置为INT,然后选中A_I

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

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

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

答案 4 :(得分:2)

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

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

假设您有一行名为id。

答案 5 :(得分:1)

我遇到了这个问题。

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

1)点击“结构”

2)转到要用作主键的字段(通常是第一个),然后单击该字段的“ PRIMARY”和“ INDEX”字段,并接受PHPMyadmin的弹出式问题“好”。

3)将自己垫在后面。

答案 8 :(得分:0)

这肯定是一个古老的话题,但我想总结一下,提出一些新想法。 要解决讨论中的警告问题,您需要做的就是将表列之一设置为PRIMARY KEY约束。

答案 9 :(得分:0)

将其添加到config.inc.php文件中对我来说很有效(在最后的$ cfg行下):

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

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

对我有用的代码

ALTER TABLE `table name`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);

答案 12 :(得分:0)

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

  

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

我的PMA是4.3.8。如果这有帮助,请告诉我..

答案 13 :(得分:0)

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

答案 14 :(得分:0)

这个问题帮助我找出了为什么phpMyAdmin拒绝我​​网格编辑等的问题。在一些桌子上。我只是忘记申报我的主键,并在我的“为什么这个表应该与其邻居不同”解决方案搜索过程中监督它...

我只是想在OP自我回答中做出以下反应:

  

另一个表有多个AI int值,它们是Primary   字段,但有多个相同类型的值。

     

对此的简单修复就是在列的末尾添加一列   表作为唯一的AI Int。基本上所有的MySQL都说它需要一个   每条记录中的唯一值,以区分行。

这实际上是我的情况,但绝对没有必要添加任何列:如果你的主键是2个字段的组合(例如多个关系中的连接表),那么只需声明它:
- 在phpyAdmin中,只需在“在[x]列上创建索引”中输入“2”,然后选择您的2列
- 或ALTER TABLE mytable ADD PRIMARY KEY(mycol1,mycol2)

答案 15 :(得分:0)

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

答案 16 :(得分:-1)

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