web-dev-qa-db-ja.com

解決策:このテーブルには一意の列が含まれていません。グリッドの編集、チェックボックス、編集、コピー、削除機能は使用できません

これは質問ではなく、自分で生成した問題/質問と解決策です。私が見つけることができる完全な実用的な解決策がなかったので、共有するのはまともな礼儀だと思いました。

PhpMyAdminで生成されるエラーは次のとおりです。

「このテーブルには一意の列は含まれていません。グリッドの編集、チェックボックス、編集、コピー、削除機能は使用できません。」

正確なシナリオに応じて、いくつかの実用的なソリューションがあります。

たとえば、すべてのAIまたは一意の識別子フィールドが一意である限り、テーブルを変更し、これが主キーで一意の値に設定されていることを確認できます。

私はテーブルの1つでこのソリューションを使用してこれを解決しました。

他のテーブルには、プライマリフィールドである複数のAI int値がありましたが、同じ種類の値が複数ありました。

このための簡単な修正は、テーブルの最後に列をUnique AI Intとして追加するだけでした。基本的にすべてのMySQLは、行を区別するために各レコードに一意の値が必要であると言っています。

これがお役に立てば幸いです。

55
OldWest

私はこの問題に直面しています。

原因はテーブルです-プライマリキーフィールドがない



たとえば、データベースthesis_dbとフィールドthesis_idがあり、プライマリ(キーアイコン)ボタンを押してthesis_idを設定し、プライマリキーフィールドになります。

enter image description here

35
D Vy

これはエラーではありません。 PhpMyAdminは、結果セットに一意のID列がないことを通知しています。送信したクエリのタイプに応じて、これは望ましい動作です。

一意のIDが必要だと言っているのはMySQLではありません。結果セットの列の組み合わせが一意であれば、それらの列の値をUPDATEまたはDELETEクエリで使用できます。一意のIDを持つ結果セットに通常表示されるチェックボックスとボタンを提供するのに十分な情報がないというのは、phpMyAdminです。

20
dr fu manchu

私の場合は異なります。この問題は、PHPMyAdminに固有のものです。他のいくつかの管理ツール(Adminer、MySQLWorkbench、HeidiSQLなど)をダウンロードしましたが、これらすべてで同じdbが正常に機能します。

すべてのインデックス、プライマリキー、および一意のキーが定義されていますが、それでもエラーが発生します。これは、MySQL 5.6にアップグレードした後に取得します(以前のバージョンと同じようには見えませんでした)。

PMAには、大文字のテーブル名に問題があることがわかりました。 PMAは大文字のテーブル名を持つキーを認識できません。それらを小さいサイズに変更すると(ALTER TABLE mytable ENGINE=INNODB-INNODBを使用します-他の何も変更せずに各テーブルでそれを行います)、私は正常にアクセスすることができました。私は、UniformServerを備えたWindowsシステムにいます。

12
Ravi

新しい列を作成し、Nameを好きなものに設定し、TypeINTに設定し、というボックスにA_I

diagramA_IチェックボックスはAUTO_INCREMENTを表します。これは基本的に、新しい列にシーケンス番号が自動的に割り当てられることを意味します(以下を参照)。

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

この列は、基本的にphpMyAdminが行を削除するための参照として機能します。必要に応じて、この新しい列の一意のボタンをクリックしますが、これは私にとっては自動的に行われました。上記の手順を実行すると、エラーメッセージが表示されなくなり、phpMyAdminで行を編集するためのボタンが表示されます。

12
Isaac Adni

これを簡単に修正するには、[SQL]タブに移動し、単にコードを入力するだけです。

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

Idという名前の行があると仮定します。

2
Daniel Alsaker

私の場合、lower_case_table_names = 2を設定し、大文字のテーブル名を使用すると、phpmyadminバージョン4.5.1でエラーが発生しました。テーブル名をすべて小文字に変更すると、問題は停止しました。

1
nonybrighto

これは、あなたがその通知を取り除き、編集のためにそれらのグリッドセルを開くことができる方法です

1)[構造]をクリックします

2)主キーにしたいフィールド(通常これが最初のもの)に移動し、そのフィールドの「PRIMARY」フィールドと「INDEX」フィールドをクリックして、PHPMyadminのポップアップ質問「OK」を受け入れます。

3)背中を自分でパッドします。

1
Average Joe

これは、元のソースDBからデータを再エクスポートしてから、ミラーDBにインポートすることで解決しました。

0
Philip Drury

この質問は、phpMyAdminがグリッド編集などを拒否した理由の問題を特定するのに役立ちました。いくつかのテーブルに。私は自分の主キーを宣言するのを忘れていたので、私の中でそれを監督していました「なぜこのテーブルは隣人と違うべきなのでしょうか」ソリューション検索プロセス...

私はOPの自己回答で次のことに反応したかっただけです:

他のテーブルには、プライマリフィールドである複数のAI int値がありましたが、同じ種類の値が複数ありました。

このための簡単な修正は、テーブルの最後に列をUnique AI Intとして追加するだけでした。基本的にすべてのMySQLは、行を区別するために各レコードに一意の値が必要であると言っています。

これは実際には私の場合でしたが、列を追加する必要はまったくありません。主キーが2つのフィールドの組み合わせ(たとえば、多対多のジャンクションテーブル)である場合は、次のように宣言します。
-phpyAdminのEITER、「[x]列のインデックスの作成」に「2」と入力し、2列を選択します
-またはALTER TABLE mytable ADD PRIMARY KEY(mycol1,mycol2)

0
fpierrat

クエリの実行後に直接変更しようとすると、このエラーが発生しました。まったく同じクエリからビューを作成した後、値を変更することができました。

0
Ray Foss

最近同じ問題が発生しましたが、重複を探した後、テーブルに主キーを設定(欠落)するだけで修正できました。これが役立つことを願っています

0
Yuri

特定の列を使用してSELECTクエリを実行するたびに同じ問題に直面しましたが、列の1つはテーブルのプライマリです。標準のwordpress "posts"テーブルの選択列を持つ選択レコードを取得しようとしました。 ID列は既にプライマリで一意です。

プライマリ/一意の列名を指定するだけでは、この問題は解決しません。 「posts.id」(tablename.columnname)のような完全な列名を指定する必要があります。これは、PMAに特定の列を選択して編集などを表示するよう指示します。

私のPMAは4.3.8です。これが役立つかどうか教えてください。

0
vinay samant

私のために働いたコード

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

これをconfig.inc.phpファイルに追加するとうまくいきました(最後の$ cfg行の下)​​:

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

ファイルはローカルコンピューターのphpMyAdminフォルダーに配置する必要があります

0
snubbus