web-dev-qa-db-fra.com

Résolution: Ce tableau ne contient pas une colonne unique. Les fonctions de modification de grille, boîtier à cocher, Modificateur, Copier et Supprimer ne sont pas disponibles

Ce n'est pas une question mais un problème/une question et une solution générés par moi-même et que j'ai trouvé efficaces. Je pensais que ce serait une courtoisie décente à partager puisqu'il n'y avait pas de solution de travail complète que je pouvais trouver.

L'erreur générée dans phpMyAdmin est:

"Ce tableau ne contient pas une colonne unique. Les fonctions d'édition de grille, de case à cocher, d'édition, de copie et de suppression ne sont pas disponibles."

Il existe plusieurs solutions de travail en fonction de votre scénario exact.

Par exemple, tant que tous vos champs d'identifiant unique ou d'identifiant unique sont uniques, vous pouvez simplement modifier la table et vous assurer qu'il s'agit de la clé primaire et que sa valeur est unique.

J'ai résolu ce problème avec cette solution sur l'une de mes tables.

L'autre table avait plusieurs valeurs AI int qui étaient le champ principal, mais il y avait plusieurs valeurs du même type. 

La solution simple pour cela consistait simplement à ajouter une colonne à la fin de la table sous le nom Unique AI Int. En gros, tout ce que MySQL dit est qu’il faut une valeur unique dans chaque enregistrement pour différencier les lignes.

J'espère que c'était utile.

54
OldWest

J'ai été confronté à ce problème.

La cause est votre table n’a pas de champ de clé primaire .

Et j’ai une solution simple: définissez un champ sur une clé primaire pour le classer en conséquence avec la logique de votre entreprise.

Par exemple, j'ai la base de données thesis_db et le champ thesis_id, j'appuierai sur le bouton Primaire (icône de clé) pour définir thesis_id en champ clé primaire

enter image description here

35
foobarfuu

Ce n'est pas une erreur. PhpMyAdmin vient de vous informer qu'il n'y a pas de colonne d'identifiant unique dans votre jeu de résultats. Selon le type de requête que vous avez envoyé, il s'agit du comportement souhaité.

Ce n'est pas MySQL qui dit avoir besoin d'un identifiant unique. Si une combinaison des colonnes de votre jeu de résultats est unique, les valeurs de ces colonnes peuvent être utilisées dans une requête UPDATE ou DELETE. C'est phpMyAdmin qui dit qu'il n'a pas assez d'informations pour vous proposer les cases à cocher et les boutons que vous verrez normalement dans un jeu de résultats avec un identifiant unique.

20
dr fu manchu

Mon cas est différent. Ce problème concerne uniquement PHPMyAdmin. J'ai téléchargé quelques autres outils d'administration (Adminer, MySQLWorkbench, HeidiSQL, etc.) et la même base de données fonctionne correctement dans tous ceux-ci.

J'ai tous les index, clé primaire et clés uniques définis et j'obtiens toujours l'erreur. Je l’obtiens après avoir mis à niveau vers MySQL 5.6 (n’avait pas la même apparence que dans les versions précédentes). 

Il s'avère que PMA a des problèmes avec les noms de table en majuscule. PMA n'est pas capable de reconnaître les clés avec des noms de table en capital. Une fois que je les ai changées en petites (ALTER TABLE mytable ENGINE=INNODB - j'utilise INNODB - le fait pour chaque table sans rien changer d'autre), j'ai pu y accéder normalement. Je suis sur un système Windows avec UniformServer.

12
Ravi

Créez simplement une nouvelle colonne, définissez Name sur ce que vous voulez, définissez Type sur INT et cochez la case A_I.

 diagram La case à cocher A_I correspond à AUTO_INCREMENT, ce qui signifie essentiellement que les numéros de séquence sont attribués automatiquement dans cette nouvelle colonne (voir ci-dessous). 

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

Cette colonne sert essentiellement de référence à phpMyAdmin pour supprimer des lignes. Si nécessaire, cliquez sur le bouton unique de cette nouvelle colonne, bien que cela se soit produit automatiquement pour moi. Après avoir suivi les étapes ci-dessus, vous ne devriez plus avoir le message d'erreur et les boutons devraient apparaître pour éditer les lignes dans phpMyAdmin!

11
Isaac Adni

Une solution facile à ce problème serait d'aller dans l'onglet SQL et simplement mettre dans le code 

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

En supposant que vous avez une ligne nommée id.

2
Daniel Alsaker

Dans mon cas, l'erreur est survenue dans phpmyadmin version 4.5.1 lorsque j'ai défini lower_case_table_names = 2 et que le nom de la table est composé de lettres majuscules. La clé primaire était définie sur incrémentation automatique, mais indiquait toujours l'erreur. Le problème s'est arrêté lorsque j'ai changé le nom de la table en minuscule.

1
nonybrighto

Pour moi, cela a été résolu en réexportant les données de la base de données source d'origine, puis en les important dans la base de données miroir.

0
Philip Drury

Cette question m'a aidé à identifier le problème de la raison pour laquelle phpMyAdmin m'a refusé grid-edit-etc. sur certaines tables. J'avais juste oublié de déclarer ma clé primaire et la surveillais dans mon "Pourquoi diable ce tableau devrait-il être différent de ses voisins" processus de recherche de solution ...

Je voulais juste réagir en suivant la réponse automatique du PO: 

L'autre table avait plusieurs valeurs AI int qui étaient le primaire champ, mais il y avait plusieurs valeurs du même genre.

La solution simple pour cela consistait simplement à ajouter une colonne à la fin du fichier table comme Unique AI Int. En gros, tout ce que dit MySQL est qu’il faut un valeur unique dans chaque enregistrement pour différencier les lignes.

C'était en fait mon cas, mais il n'est absolument pas nécessaire d'ajouter de colonne: si votre clé primaire est la combinaison de 2 champs (ex. Table de jonctions dans une relation plusieurs à plusieurs), déclarez-la simplement comme telle:
- eiter dans phpyAdmin, entrez simplement "2" dans "Créer un index sur [x] colonnes", puis sélectionnez vos 2 colonnes
- ou ALTER TABLE mytable ADD PRIMARY KEY(mycol1,mycol2)

0
fpierrat

J'ai eu cette erreur en essayant de modifier directement après avoir exécuté Query. En fait, après avoir créé une vue à partir de la même requête, j'ai pu modifier les valeurs.

0
Ray Foss

J'ai récemment eu le même problème et après avoir recherché des doublons, j'ai pu le résoudre simplement en définissant une clé primaire (manquante) sur la table. J'espère que cela pourrait aider 

0
Yuri

J'ai rencontré le même problème chaque fois que je lance une requête SELECT avec des colonnes spécifiques, bien que celle de la colonne soit primaire dans la table. J'essayais de récupérer des enregistrements sélectifs avec des colonnes sélectives dans la table "posts" de wordpress standard. La colonne ID est déjà principale et unique.

Spécifier simplement le nom de colonne primaire/unique ne résoudra pas ce problème. Vous devez spécifier le nom complet de la colonne, tel que "posts.id" (nomtable.nomcolonne), qui indique à PMA de sélectionner une colonne spécifique et de révéler une modification, etc.

Mon PMA est 4.3.8. Faites-moi savoir si cela aide ..

0
vinay samant

le code qui a fonctionné pour moi

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

C’est ainsi que vous vous débarrasserez de cette notification et pourrez ouvrir ces cellules de la grille pour modification.

1) cliquez sur "STRUCTURE" 

2) Accédez au champ dans lequel vous souhaitez définir une clé primaire (généralement la première), puis cliquez sur les champs "PRIMARY" et "INDEX" correspondant à ce champ et acceptez la question "OK" de PHPMyadmin. 

3) vous plaquer dans le dos.

0
Average Joe

Ajouter ceci dans le fichier config.inc.php a fonctionné pour moi (sous la dernière ligne $ cfg):

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

Le fichier doit être situé dans le dossier phpMyAdmin sur votre ordinateur local.

0
snubbus