REPLACE と IGNORE キーワードは、固有のキー値上に既存行を複製する
インプット行の扱いをコントロールします。

REPLACE を指定すると、インプット行は既存行を置き換えます。
言い換えると、主キーや固有インデックスに対して同じ値を持つ、既存行であるという事です。

IGNORE を指定すると、 固有キー値上の、既存行を複製するインプット行はスキップされます。
もしどちらのオプションも指定しなければ、その動作は LOCAL キーワードが指定されたかどうかによって
決まります。LOCAL を利用すると、複製キー値が見つかった時点でエラーが発生し、テキスト ファイル
の残りは無視されます。LOCAL を使用しなければ、デフォルトの動作は IGNORE が指定された時と
同じです。これは、サーバは操作の最中にファイルの送信を中止する事ができないからです。

もしロード操作中に外部キー制約を無視したければ、LOAD DATA を実行する前に
SET FOREIGN_KEY_CHECKS=0 ステートメントを発行する事ができます。

(例)
以下のテーブルにPKを作成後にREPLACEオプションを使用してデータをロードしてみます。

テーブルの状態
load_replace

テキストファイルの中身
text

mysql> LOAD DATA INFILE '/tmp/MYSQLIMP.txt' REPLACE INTO TABLE MYSQLIMP;
Query OK, 8 rows affected (0.00 sec)
Records: 4 Deleted: 4 Skipped: 0 Warnings: 0

メモ
①テキストファイルから4ラインが読み込まれた
②4件のデータが削除されて4件の新しいデータがファイルから読み込まれた。(PKあり)
③全体で、8行のデータが処理された(Query OK, 8 rows affected (0.00 sec))

REPLACE は、もしテーブル内の古い行が PRIMARY KEY か UNIQUE インデックスの
新しい行と同じ値を持っていれば、古い行は新しい行が挿入される前に削除されるという事以外、
INSERT と全く同じように機能します。

結果
load_data_infile_replace

参考サイト
LOAD DATA INFILE 構文
12.2.6. REPLACE 構文
LOAD DATA INFILE構文でデータのインポート!

One Thought on “LOAD DATA INFILE 構文(REPLACE)

  1. Pingback: variable.jp [Mainly Deals with RDBMS] » Blog Archive » LOAD DATA INFILE (IGNOREオプション)

Post Navigation