すでにデータベースにある行を無視したかったので、LOAD DATA INFILEコマンドを使用して問題が発生しました。たとえば、次のようなデータを含むテーブルがある場合、
id |name |age
--------------------
1 |aaaa |22
2 |bbbb |21
3 |bbaa |20
4 |abbb |22
5 |aacc |22
Idは自動インクリメント値です。私が持っているcsvファイルには次のようなデータが含まれています
"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"
行を無視したい、
"aaaa","22"
"abbb","22"
"aacc","22"
残りをテーブルにアップロードします。そして、私がまだテーブルにすべてをアップロードするクエリは次のとおりです、
LOAD DATA INFILE 'member.csv'
INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
このタスクで私を助けてください..それは非常に高く評価されます..私は多くのリンクを試してみましたが、助けにはならなかった:(
Age列にUNIQUEインデックスを作成してから、次の操作を行います。
LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);
1つのアプローチは、一時テーブルを使用することです。これにアップロードし、SQLを使用して一時テーブルからtbl_memberを更新します。
INSERT INTO tbl_member
SELECT Field1,Field2,Field3,...
FROM temp_table
WHERE NOT EXISTS(SELECT *
FROM tbl_member
WHERE (temp_table.Field1=tbl_member.Field1 and
temp_table.Field2=tbl_member.Field2...etc.)
)
複数の列に一意のインデックスを作成できます。 LOAD DATAは、これらすべての列の既存の行に一致する行を挿入しません。
例えばALTER TABLE tbl_member ADD UNIQUE unique_index(name、age)