web-dev-qa-db-ja.com

自動インクリメントとして主キーを使用してテキストファイルをテーブルにインポートする方法

MySQLテーブルにインポートする必要があるテキストファイル内にいくつかのバルクデータがあります。テーブルは2つのフィールドで構成されます。

  1. ID(自動インクリメントの整数)
  2. 名前(varchar)

テキストファイルは、1行に1つの名前を持つ名前の大規模なコレクションです...

(例)

John Doe
Alex Smith
Bob Denver

私はphpMyAdminを介してテキストファイルをインポートする方法を知っていますが、理解している限り、ターゲットテーブルと同じ数のフィールドを持つデータをインポートする必要があります。テキストファイルから1つのフィールドにデータをインポートし、IDフィールドを自動的に自動インクリメントする方法はありますか?

よろしくお願いします。

14
webworm

LOADTABLE INFILEを使用したインポートでは正しくありません。最後の列/フィールドとして自動インクリメント列を作成してください...解析として、テーブルが30列で定義されているが、テキストファイルには1つ(またはそれ以下)しかない場合、最初の列を直接シーケンスで最初にインポートするため、フィールド間で区切り記号...が正しいことを確認してください(今後のインポートの場合)。繰り返しますが、インポートされていることがわかっている列数の後に自動インクリメントを配置します。

create table YourMySQLTable
(  FullName varchar(30) not null ,
   SomeOtherFlds varchar(20) not null,
   IDKey int not null AUTO_INCREMENT,
   Primary KEY (IDKey)
);

IDKeyはテーブルの最後のフィールドで自動インクリメントされることに注意してください... INPUTストリームのテキストファイルに関係なく、最終的なテーブルが実際に保持するよりも列が少ない場合があります。

次に、データをインポートします...

LOAD DATA
    INFILE `C:\SomePath\WhereTextFileIs\ActualFile.txt`
    INTO TABLE YourMySQLTable
    COLUMNS TERMINATED BY `","`  
    LINES TERMINATED BY `\r\n` ;

上記の例は、 "myfield1"、 "anotherField"、 "LastField"などの各フィールドを引用符で囲んだカンマ区切りリストに基づいています。また、終了は、典型的なテキストファイルが行ごとに区切られているcr/lfです。

完全な名前を1つの列として持つテキストファイルのサンプルでは、​​すべてのデータが "YourMySQLTable"のFullName列に読み込まれます。 IDKeyはリストの最後にあるため、1からの自動インクリメント割り当て値になりますか?インバウンドテキストの列との競合はありません。

5
DRapp

テーブルのフィールドを並べ替える必要のない別の方法(自動インクリメントフィールドが最初の列であると想定)は次のとおりです。

1) Open/import the text file in Excel (or a similar program).

2) Insert a column before the first column. 

3) Set the first cell in this new column with a zero or some other placeholder.

4) Close the file (keeping it in its original text/tab/csv/etc. format).

5) Open the file in a text editor.

6) Delete the placeholder value you entered into the first cell.

7) Close and save the file.

これで、元のファイルの各行の前に空の列が含まれるファイルが作成されます。これは、phpMyAdminを介してインポートすると、次の関連する自動増分値に変換されます。

16
Queue

これが最も簡単な方法です。

  1. ファイルに列名を含むヘッダー行がないことを確認してください。存在する場合は、削除してください。
  2. PhpMyAdminで、いつものように、テーブルのImportタブに移動して、ファイルを選択します。形式としてCSVを選択します。次に、これは重要な部分です。

形式固有のオプション:

...の中に Column names:データの対象となる列の名前を入力、あなたの場合は「名前」。

これにより、名前がインポートされ、id列が自動インクリメントされます。完了です!

phpMyAdmin 4.2.7.1でテスト済み

9

私はこれを試しました:

  1. PhpMyAdminテーブルで、csvにあるフィールドの数と一致させます。
  2. テーブルへのcsvデータのインポートを実行する
  3. [構造]タブに移動し、新しいフィールドを追加します[テーブルの最初に](そこにidフィールドが必要だと思います)
  4. [name]属性に「id」と入力し、
  5. 【長さ】〜「5」
  6. 「インデックス」から「プライマリ」へ
  7. A_I(自動インクリメント)をチェックします。
  8. [Go]ボタンを押します
  9. テーブルは、自動インクリメントですべてのデータの前にあるidフィールドで更新されているはずです。

少なくともこの方法では、フィールドの一致などについて心配する必要はありません。

2
Matty Yeow

列IDなしでフォーマット固有のオプションの下にcolumn_namesを追加するだけで、この問題を解決しました。列IDが自動インクリメントだからです。私の場合、CSVファイルで何も変更せずに正常に動作します。私のCSVファイルには、列ヘッダー内にデータしかありません。

1
user12210692

テキストファイルの最初のフィールドとしてTABを使用し、それを通常どおりインポートしました。 IDフィールドに関する警告が表示されましたが、フィールドは期待どおりに増加しました...

1
Art Lawrence

テーブルの列が一致しない場合は、通常、実際のデータがあったはずの場所に空のデータを含む「偽の」フィールドを追加するので、テーブルに"id", "name", "surname", "address", "email" そして、私が持っています "id", "name", "surname"、CSVファイルを変更して"id", "name", "surname", "address", "email"ただし、データがないフィールドは空白のままにします。

この結果、CSVファイルは次のようになります。

1,John,Doe,,
2,Jane,Doe,,

他の方法よりも簡単だと思います。

0
Kobus Myburgh