web-dev-qa-db-ja.com

Phpmyadmin#1075-テーブル定義が正しくありません。自動列は1つしか存在できず、キーとして定義する必要があります

こんにちは、mySqlデータベース(元はアクセスデータベースでした)をphpmyadminにインポートして、このエラーが発生します:

SQLクエリ:

CREATE TABLE  `Acc_inst` (

 `inst_ID` INTEGER NOT NULL AUTO_INCREMENT ,
 `inst_Name` VARCHAR( 255 ) ,
 `Inst_Ws` VARCHAR( 255 ) ,
 `inst_ph` VARCHAR( 255 ) ,
 `inst_Fx` VARCHAR( 255 ) ,
 `Inst_E` VARCHAR( 255 )
) ENGINE = INNODB DEFAULT CHARSET = utf8;

MySQLによると:ドキュメント

1075-不正なテーブル定義。自動列は1つしか存在できず、キーとして定義する必要があります

-実際には自動インクリメント列のみにあり、主キーとして定義されているため、なぜこのエラーが発生するのかわかりません

7
Nimara

自動インクリメント列を主キーとして定義します。

CREATE TABLE  `Acc_inst` 
(    
   `inst_ID` INTEGER NOT NULL AUTO_INCREMENT ,
   `inst_Name` VARCHAR( 255 ) ,
   `Inst_Ws` VARCHAR( 255 ) ,
   `inst_ph` VARCHAR( 255 ) ,
   `inst_Fx` VARCHAR( 255 ) ,
   `Inst_E` VARCHAR( 255 ) ,
   PRIMARY KEY `inst_ID`(`inst_ID`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
5
Tarun

少し遅れましたが、phpMyAdminの最新バージョン(4.4.2)でも同じエラーが発生します。 Nimaraは手動のSQLクエリを使用しましたが、特別な「新しいテーブルの追加」フォームを使用してもまだこのエラーが発生しました。

したがって、私と同じようにここに来て、#1075エラーを検索した人は、最初にフォームにインデックス/プライマリ/自動インクリメント列を設定し、新しい列をいくつか追加して、フォームを送信します。さらにカラムを追加すると、phpMyAdminが何らかのバックグラウンド更新を実行し、「プライマリ」情報を失うようです。フォームには引き続き表示されますが、バックグラウンドで送信されるSQLクエリには、この情報がありません。

したがって、解決策は、プライマリ列の選択を解除して、再度設定することです。私はそれがバグだと確信していますが、この方法でシンプルかつ高速に解決します。

11
AdrianC
CREATE TABLE  `Acc_inst` 
(    
   `inst_ID` INTEGER NOT NULL primary key AUTO_INCREMENT ,
   `inst_Name` VARCHAR( 255 ) ,
   `Inst_Ws` VARCHAR( 255 ) ,
   `inst_ph` VARCHAR( 255 ) ,
   `inst_Fx` VARCHAR( 255 ) ,
   `Inst_E` VARCHAR( 255 )
) ENGINE = INNODB DEFAULT CHARSET = utf8;

エラーは、自動インクリメント列をキーとして定義する必要があることを示しています:Add primary keyをこの列定義に追加します。

4
juergen d