这不是一个问题,而是我发现的自生问题/问题和解决方案。我认为分享会很体面,因为我找不到一个完整的工作解决方案。
phpMyAdmin中生成的错误是:
“此表格不包含唯一列。网格编辑,复选框,编辑,复制和删除功能不可用。”
根据您的具体情况,有几种可行的解决方案。
例如,只要您的所有AI或唯一标识符字段都是唯一的,您就可以简单地更改表并确保这是主键并设置为唯一值。
我在我的一张桌子上用这个解决方案解决了这个问题。
另一个表有多个AI int值,它们是Primary字段,但是有多个相同类型的值。
对此的简单修复是将一列添加到表的末尾,作为Unique AI Int。基本上所有的MySQL都说它需要在每条记录中使用唯一值来区分行。
希望这有用。
答案 0 :(得分:35)
我遇到过这个问题。
原因是您的表没有主键字段。
我有一个简单的解决方案:将字段设置为适合您业务逻辑的特定字段的主键。
例如,我有数据库thesis_db
和字段thesis_id
,我将按主键(键图标)将thesis_id
设置为主键字段:
答案 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
强>
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)
确保所有表都有一个主键。我忘记为一个表添加主键,这为我解决了这个问题。 :)