BULK INSERTが使えない。
SQL Serverで普通に使っていたBULK INSERTは使えない。
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'BULK INSERT `Sample`
LOAD DATA INFILE 構文を使う
LOAD DATA LOCAL
INFILE 'C:\\ProgramData\\MySQL\\MySQL Server 8.0\\Uploads\\ファイル名.tsv'
INTO TABLE `テーブル名`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
【ポイント】
・ファイルの格納場所は隠しフォルダになっているので、設置する際は見えるようにする
・クライアント側とサーバー側の「--local_infile」を「1(ON)」にする。(本記事後述)
→MySQL8.0からの仕様で、設定しないと、ERROR 3948 (42000)が発生する。
・ファイル拡張子は何でもOK!!
・条件指定は「`」バックではなく「'」シングルクオートを利用すること。
→ERROR 1064 (42000)が発生する
・'\t'は正規表現のタブを表す
・'\r\n'はWindowsの改行コード
・IGNORE 1 LINES; は1行目無視の意味。(今回1行目がフィールドの為)
--local_infileの設定
①クライアント側
ログイン時に「--local_infile=1」を指定。
sql
-u root -p --local_infile=1
②サーバー側
ログイン後に「--local_infile=1」を指定。
sql
-- 設定の確認(初期値:0)
SELECT @@local_infile;
-- 設定変更
SET PERSIST local_infile= 1;
実行結果 サンプル
sql
mysql> select * from game;
+---------+----------------------------------------------+--------+--------------------------+------------+-------------+
| ranking | title | model | maker | sales_2021 | sales_total |
+---------+----------------------------------------------+--------+--------------------------+------------+-------------+
| 1 | モンスターハンターライズ | Switch | カプコン | 2 | 2 |
| 2 | 桃太郎電鉄 ?昭和 平成 令和も定番!? | Switch | KONAMI | 1 | 2 |
| 3 | スーパーマリオ 3Dワールド | Switch | 任天堂 | 820 | 820 |
| 4 | リングフィットアドベンチャー | Switch | 任天堂 | 623 | 2 |
| 5 | マリオカート8 デラックス | Switch | 任天堂 | 475 | 3 |
| 6 | あつまれ どうぶつの森 | Switch | 任天堂 | 454 | 6 |
| 7 | Minecraft | Switch | 日本マイクロソフト | 370 | 2 |
| 8 | 大乱闘スマッシュブラザーズ SPECIAL | Switch | 任天堂 | 336 | 4 |
| 9 | 牧場物語 オリーブタウンと希望の大地 | Switch | マーベラス | 281 | 281 |
| 10 | New ポケモンスナップ | Switch | ポケモン | 259 | 259 |