1

次のようにフォーマットされた csv ファイルがあります。

Rank, URL
1, www.google.com
2, www.facebook.com
etc...

構造を持つテーブルがあります

url, source, date_added

各 csv ファイルには異なるソース ID があります。

次のクエリを使用してデータをロードしています

load data local infile 'this.csv' 
into table seeds.seed
fields terminated by ',';

これは私が望んでいることではありませんが、それが私の出発点です。私がやりたいことは、URL フィールドとして挿入する列 2 を選択し、各エントリのソースを 0 に設定することです。そこで、こんなことを考えている...

load data local infile 'this.csv' 
into table seeds.seed(url, source)
select col1, '0'
fields terminated by ',';

col1 の正しい表記は何ですか? また、クエリの他の重要な部分が欠けていますか?

4

3 に答える 3

1

最終的に機能したクエリ

load data local infile 'this.csv' into table seeds.seed
fields terminated by ',' lines terminated by '\n'
(@col1,@col2) set url=@col2, source='0';
于 2013-07-22T15:47:09.550 に答える
1

load data infile を使用するのはかなりトリッキーです。私は先週ずっと、非常に多くのエラーで解決しようとしました。私の洞察をお伝えします。

create table ステートメントが表示されないため、使用しているデータ型がわかりません。整数フィールドがある場合は、たとえ間違っていても、csv ファイルの各フィールドに少なくとも 0 を入力する必要があります。後でインポート後に削除します。

整数フィールドが主キーのような auto_increment である場合は、フィールドをすべて省略できます。私の間違いをしないで、フィールドに値を入れないでください。完全に削除しないと、csv がフィールド ターミネータ文字で始まり、問題が発生しなくなります。

ファイル「file.csv」にデータをロード

テーブル mytablename に

「,」で終了するフィールド

'\r\n' で終了する行 - (Windows の場合)

1 行 (field1、field2、field4 など) を無視します。csv にフィールドをリストします。データのないフィールドがある場合は、csv からそれらを削除し、ここでもリストから除外できます。

1 行を無視 - フィールド リストを含む csv の最初の行を無視します。

id=null を設定し、

field3=ヌル;

csvファイルにないため、auto_increment idフィールドをnullに設定し、mysqlはそれが存在し、それをどうするかを認識しています。

また、field3 には値がなく、例として csv ファイルから削除されたため、null に設定します。

于 2013-07-22T16:00:37.467 に答える