php-解决方案:此表不包含唯一列。 网格编辑,复选框,编辑,复制和删除功能不可用
这不是问题,而是我发现可以解决的一个自我产生的问题/问题和解决方案。 我想分享一下会很有礼貌,因为我找不到完整的可行解决方案。
phpMyAdmin中生成的错误是:
“此表不包含唯一列。网格编辑,复选框,编辑,复制和删除功能不可用。”
根据您的实际情况,有几种可行的解决方案。
例如,只要您的所有AI或“唯一标识符”字段都是唯一的,那么您就可以简单地更改表并确保它是主键并设置为唯一值。
我在一张桌子上用此解决方案解决了这个问题。
另一个表具有多个AI int值,这些值是Primary字段,但是有多个相同类型的值。
简单的解决方法是在表的末尾添加一列作为Unique AI Int。 基本上,MySQL只是在说每条记录需要一个唯一值来区分行。
希望这会有所帮助。
16个解决方案
36 votes
我已经遇到了这个问题。
原因是您的表没有主键字段。
我有一个简单的解决方案:将一个字段设置为主键,以适合您的业务逻辑的特定字段。
例如,我有数据库thesis_db和字段thesis_id,我将按按钮Primary(键图标)以将thesis_id设置为主键字段:
Do Nhu Vy answered 2019-12-24T19:14:05Z
20 votes
这不是错误。 PhpMyAdmin只是在通知您,结果集中没有唯一的ID列。 根据您发送的查询的类型,这是所需的行为。
不是MySQL在说它需要一个唯一的ID,如果结果集中各列的任何组合都是唯一的,则这些列的值可以在UPDATE或DELETE查询中使用。 phpMyAdmin表示它没有足够的信息来提供您通常会在具有唯一ID的结果集中看到的复选框和按钮。
dr fu manchu answered 2019-12-24T19:14:31Z
12 votes
我的情况不同。 此问题仅特定于PHPMyAdmin。 我下载了其他几个管理工具(Adminer,MySQLWorkbench,HeidiSQL等),并且相同的数据库在所有这些工具中均能正常工作。
我已经定义了所有索引,主键和唯一键,但仍然收到错误。 升级到MySQL 5.6后,我得到了这个信息(与以前的版本不一样)。
事实证明,PMA的大写表格名称存在问题。 PMA无法识别带有大写表格名称的密钥。 一旦将它们更改为较小的值(ALTER TABLE mytable ENGINE=INNODB-我使用INNODB-对每个表执行此操作,而不更改其他任何内容),便可以正常访问。 我在使用UniformServer的Windows系统上。
Ravi answered 2019-12-24T19:15:01Z
12 votes
只需创建一个新列,将A_I设置为任意值,将AUTO_INCREMENT设置为INT并选中显示A_I的框即可。
A_I复选框代表AUTO_INCREMENT,这实际上意味着在该新列中自动分配了序列号(请参见下文)。
column1 | column2 | id
-----------------------
value | value | 1
-----------------------
value | value | 2
-----------------------
value | value | 3
-----------------------
value | value | 4
此列实质上是phpMyAdmin删除行的参考。 如有必要,请单击此新列的唯一按钮,尽管这对我而言是自动发生的。 完成上述步骤后,您将不再显示错误消息,并且应显示用于编辑phpMyAdmin中的行的按钮!
Isaac Adni answered 2019-12-24T19:15:30Z
2 votes
一个简单的解决方法是转到SQL选项卡,只需将其放入代码中
ALTER TABLE `tablename`
ADD PRIMARY KEY (`id`);
假设您有一个名为id的行。
Daniel Alsaker answered 2019-12-24T19:15:55Z
1 votes
在我的情况下,当我设置lower_case_table_names = 2并使用大写字符的表名时,该错误发生在phpmyadmin版本4.5.1中。该表的主键设置为自动递增,但仍显示该错误。 当我将表名更改为全部小写时,该问题停止了。
nonybrighto answered 2019-12-24T19:16:15Z
1 votes
这是您摆脱该通知并能够打开那些网格单元进行编辑的方式
1)点击“结构”
2)转到要用作主键的字段(通常是第一个),然后单击该字段的“ PRIMARY”和“ INDEX”字段,并接受PHPMyadmin的弹出问题“ OK”。
3)将自己垫在后面。
Average Joe answered 2019-12-24T19:16:48Z
1 votes
在phpMyAdmin文件中添加此文件对我有用(在最后的$ cfg行下):
phpMyAdmin
该文件应位于本地计算机上的phpMyAdmin文件夹中
snubbus answered 2019-12-24T19:17:17Z
1 votes
我已经遇到了这个问题。
原因是您的表没有主键字段。
我有一个简单的解决方案:将一个字段设置为主键,以适合您的业务逻辑的特定文件。例如,我有数据库thesis_db和字段thesis_id,我将按按钮Primary(键图标)将thesis_id设置为主键字段
maral answered 2019-12-24T19:17:46Z
0 votes
我最近遇到了同样的问题,并且在查找重复项之后,仅通过在表上设置(丢失)主键就可以解决此问题。 希望这可以帮助
Yuri answered 2019-12-24T19:18:06Z
0 votes
这个问题帮助我确定了为什么phpMyAdmin拒绝我grid-edit-etc的问题。 在某些桌子上。 我只是忘了声明我的主键,而在我的“为什么该表与其邻居不一样”解决方案搜索过程中对此进行了监督...
我只是想对OP自我解答中的以下内容做出反应:
另一个表具有多个AI int值,这些值是Primary 字段,但是有多个相同类型的值。
最简单的解决方法是在列的末尾添加一列 表作为唯一AI整数。 基本上所有MySQL都在说它需要一个 每个记录中的唯一值以区分行。
这实际上是我的情况,但是绝对不需要添加任何列:如果您的主键是2个字段的组合(例如,多对多关系的联结表),则只需这样声明:
-在phpmyAdmin中打开,在“在[x]列上创建索引”中输入“ 2”,然后选择2列
-或ALTER TABLE mytable ADD PRIMARY KEY(mycol1,mycol2)
fpierrat answered 2019-12-24T19:18:54Z
0 votes
在运行Query之后尝试直接修改时出现此错误。 事实证明,从该完全相同的查询中查看后,我能够修改这些值。
Ray Foss answered 2019-12-24T19:19:14Z
0 votes
每当我用特定列触发SELECT查询时,我都会遇到相同的问题,尽管该列之一是表中的主要列。 我正在尝试使用标准wordpress“职位”表中的选择性列获取选择性记录。 ID列已经是主要且唯一的。
仅指定主/唯一列名称将无法解决此问题。 您必须指定完整的列名,例如“ posts.id”(tablename.columnname),它告诉PMA选择特定的列并显示编辑等。
我的PMA是4.3.8。 让我知道这是否有帮助。
vinay samant answered 2019-12-24T19:19:43Z
0 votes
对我有用的代码
ALTER TABLE `table name`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
Oleg Abramov answered 2019-12-24T19:20:03Z
0 votes
对于我来说,这是通过从原始源DB重新导出数据,然后将其导入到镜像DB中来解决的。
Philip Drury answered 2019-12-24T19:20:23Z
0 votes
确保所有表都有一个主键。 我忘记为一个表添加主键,这为我解决了这个问题。 :)
Jessa lauren answered 2019-12-24T19:20:43Z