Skip to content

Instantly share code, notes, and snippets.

@bz0
Last active October 23, 2019 15:14
Show Gist options
  • Save bz0/67f5dfb0b2aa8ac1c1f3e669464e97ed to your computer and use it in GitHub Desktop.
Save bz0/67f5dfb0b2aa8ac1c1f3e669464e97ed to your computer and use it in GitHub Desktop.

LOAD DATA INFILE

https://dev.mysql.com/doc/refman/5.6/ja/load-data.html

LOAD DATA INFILE [filepath] INTO TABLE [db.table]

※実行する際のmysqlアカウントにはFILE権限が必要です。

local-infileを有効にする

/etc/my.cnf

[server]
local-infile=1

挙動

速度

INSERT ステートメントを使用する場合より、20 倍速くなる
https://dev.mysql.com/doc/refman/5.6/ja/insert-speed.html

重複キーエラー

LOAD DATA INFILE では、データ解釈や重複キーのエラーによって操作が終了する。 重複しないデータが混じっていたとしても、重複キーがあれば何もINSERTされず終了する。

LOAD DATA INFILE xxx INTO TABLE xxx
PDO::exec(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'

IGNOREをつけると一意のキー値に関して既存の行は無視し新しい行だけ登録する。

LOAD DATA INFILE xxx IGNORE INTO TABLE xxx

REPLACEをつけると一意のキー値に関して既存の行は置き換えられます。新規行は登録されます。

LOAD DATA INFILE xxx REPLACE INTO TABLE xxx

オプション

一行飛ばす

IGNORE 1 LINES

FIELDS TERMINATED BY ',' : 

テーブルの主キーに重複した値を入れようとするとエラーになる

PDO::exec(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment