end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

mysqlのLOAD DATA LOCAL INFILEによる bulk insert オレオレまとめ

sqlの"--"コメントにも記載していますが、自分としてのポイントは、

  • LOCAL INFILEの"LOCAL"で、"Access denied for user..."のようなエラーになりづらい
  • "\N"としなくても、NULLIF()でnull値をimportできます

かな?

LOAD DATA LOCAL INFILE
'/path/to/import_file.csv'
[REPLACE | IGNORE]
INTO TABLE import_tbl
character set 'utf8'              -- 文字コード
FIELDS TERMINATED BY ','
       OPTIONALLY ENCLOSED BY '"' -- フィールドを囲む文字
       ESCAPED BY '\'             -- エスケープ文字
LINES  TERMINATED BY '\n'
IGNORE 0 LINES                    -- 先頭?行を無視
(field_1,field_2,...)             -- import対象のcolumn
SET                               -- 必要に応じ値を変換
 update_time = NULLIF(update_time, '0000-00-00 00:00:00'), --日時の場合は注意
 field_1     = IF(field_1='A', field_1, null),
;

まぁ、dev.mysql.com/doc に記載の通りなんですけどね。 https://dev.mysql.com/doc/refman/5.6/ja/load-data.html