TechNote

事務屋のおぼえがき

MySQL CSVローダーの作成方法

システム構築時に、開発環境DBデータ(CREATE TABLEやCSVデータ)を本番環境に移す時、手動で実行するのではなく全て自動化すべきである。

ローダを使ってCREATE TABLE~CSVインポートを実行する手順。

1.sqlファイルを準備

ここでは「test.sql」とする。
中身には以下を記述。

DROP TABLE IF EXISTS tableA;
DROP TABLE IF EXISTS tableB;
DROP TABLE IF EXISTS tableC;

CREATE TABLE tableA (
ID VARCHAR(10),
STAFFCODE VARCHAR(10),
STARTDATE date
) engine=InnoDB default charset=utf8;

CREATE TABLE tableB (
ID VARCHAR(10),
STAFFCODE VARCHAR(10),
STARTDATE date
) engine=InnoDB default charset=utf8;

CREATE TABLE tableC (
ID VARCHAR(10),
STAFFCODE VARCHAR(10),
STARTDATE date
) engine=InnoDB default charset=utf8;

LOAD DATA INFILE "tableA.csv"
INTO TABLE tableA FIELDS TERMINATED BY ","
ENCLOSED BY '"'
LINES TERMINATED BY "\r\n";

LOAD DATA INFILE "tableB.csv"
INTO TABLE tableA FIELDS TERMINATED BY ","
ENCLOSED BY '"'
LINES TERMINATED BY "\r\n";

LOAD DATA INFILE "tableC.csv"
INTO TABLE tableA FIELDS TERMINATED BY ","
ENCLOSED BY '"'
LINES TERMINATED BY "\r\n";

2.sqlファイルを実行するためのバッチファイルを作成。

(-pの後の"test"はデータベース名)

@echo off
mysql -u root -p test < "C:\loader\test.sql"
pause

ちなみに準備するcsvファイルは「mysql\data\test(データベース名)」の中に配置しておく必要がある。
(パス指定も可能?)

実際にこのバッチを実行するとDBパスワードを聞いてくるので、パスワードを入力してEnter。

これでためしてテーブルの中身を確認。
日本語部分が文字化けしている場合、character_set_databaseを修正する。

MySQLのLOAD DATA INFILEでは、character_set_databaseシステム変数の文字セットを使うらしい。
phpmyadminでの修正の場合は「操作」にて可能)


あわせて読みたい

MySQLでインデックスを作成する方法 - TechNoteMySQLでインデックスを作成する方法 - TechNote

これまで結構DB使ってデータ検索とかいろいろしてきたけど、「パフォーマンスチューニング」とかいう言葉を見ても「?」という感じのまま使ってきた。なのでテーブル生成...

LOAD DATA INFILE使用時の文字化け - TechNoteLOAD DATA INFILE使用時の文字化け - TechNote

環境が変わったので移行時にこの方法で環境作成&データインポートをしたところ文字化けに遭遇。「LOAD DATA」の直前にSET NAMES UTF8;などと記述...

phpmyadminでLOAD DATA INFILE(カラム指定)の例 - TechNotephpmyadminでLOAD DATA INFILE(カラム指定)の例 - TechNote

mysqlモニタからのLOAD DATAのコマンドは下記。mysql> load data infile "c:\sample\KEN_ALL.csv" int...