次の列を持つテーブルがあります。
id | name | city
テーブルには1000のエントリがあります。
次のような限られた行数のCSVファイルがあります。
id,city
34,Denver
45,Kansas City
145,New York
使ってもいいですか LOAD DATA INFILE
CSVをテーブルにインポートしますが、新しいエントリを挿入する代わりに、id
列に基づいて行を更新しますか?
REPLACE
は、DELETE
およびINSERT
を機械的に実行します。これにより、主キーが変更される場合があります。
これが他にできることです。
テーブルの名前がname_cityで、次のようになっているとします。
CREATE TABLE name_city
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL,
city VARCHAR(30) NOT NULL,
PRIMARY KEY (id)
);
そして、あなたはLOAD DATA INFILE
をやりたいと思っています。
IDに基づいて都市を更新する手順は次のとおりです。
ステップ01)インポートに使用する別のテーブルを作成する
CREATE TABLE name_city_import LIKE name_city;
手順02)インポートテーブルから名前列を削除する
ALTER TABLE name_city_import DROP COLUMN name;
ステップ03)name_city_import
へのインポートを実行します
LOAD DATA INFILE 'somefile.csv' INTO TABLE name_city_import ...
ステップ04)UPDATE JOINを実行する
UPDATE name_city_import B
INNER JOIN name_city A USING (id)
SET A.city = B.city;
ステップ05)インポートテーブルを削除する
DROP TABLE name_city_import;
それでおしまい。
試してみる !!!
Idに一意のインデックスがある場合、またはそれが主キーである場合は、REPLACE
を追加できます:LOAD DATA INFILE 'file_name' REPLACE ....