MySQLテーブルにインポートする必要があるテキストファイル内にいくつかのバルクデータがあります。テーブルは2つのフィールドで構成されます。
テキストファイルは、1行に1つの名前を持つ名前の大規模なコレクションです...
(例)
John Doe
Alex Smith
Bob Denver
私はphpMyAdminを介してテキストファイルをインポートする方法を知っていますが、理解している限り、ターゲットテーブルと同じ数のフィールドを持つデータをインポートする必要があります。テキストファイルから1つのフィールドにデータをインポートし、IDフィールドを自動的に自動インクリメントする方法はありますか?
よろしくお願いします。
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からの自動インクリメント割り当て値になりますか?インバウンドテキストの列との競合はありません。
テーブルのフィールドを並べ替える必要のない別の方法(自動インクリメントフィールドが最初の列であると想定)は次のとおりです。
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を介してインポートすると、次の関連する自動増分値に変換されます。
これが最も簡単な方法です。
CSV
を選択します。次に、これは重要な部分です。形式固有のオプション:
...の中に Column names:
データの対象となる列の名前を入力、あなたの場合は「名前」。
これにより、名前がインポートされ、id
列が自動インクリメントされます。完了です!
phpMyAdmin 4.2.7.1でテスト済み
私はこれを試しました:
少なくともこの方法では、フィールドの一致などについて心配する必要はありません。
列IDなしでフォーマット固有のオプションの下にcolumn_namesを追加するだけで、この問題を解決しました。列IDが自動インクリメントだからです。私の場合、CSVファイルで何も変更せずに正常に動作します。私のCSVファイルには、列ヘッダー内にデータしかありません。
テキストファイルの最初のフィールドとしてTABを使用し、それを通常どおりインポートしました。 IDフィールドに関する警告が表示されましたが、フィールドは期待どおりに増加しました...
テーブルの列が一致しない場合は、通常、実際のデータがあったはずの場所に空のデータを含む「偽の」フィールドを追加するので、テーブルに"id", "name", "surname", "address", "email"
そして、私が持っています "id", "name", "surname"
、CSVファイルを変更して"id", "name", "surname", "address", "email"
ただし、データがないフィールドは空白のままにします。
この結果、CSVファイルは次のようになります。
1,John,Doe,,
2,Jane,Doe,,
他の方法よりも簡単だと思います。