MySQLのファイル出力とファイルから流し込み


はじめに

仕事でDBからcsvファイルに出力、csvファイルをDBに流し込む機会があったので

手順をメモします。


MYSQLからファイル出力


mysql -u root -p user_db --execute="SELECT * from users;" > hoge.csv

mysql -u ユーザー名 -p DB名 --execute="実行SQL" > 出力先ファイル

mysql、dbに接続しexecute(準備したSQLを実行する)オプションにて出力したいSQL文を記述し、出力したいファイルにリダイレクトします。

MYSQLに接続

mysql -u root -p user_db

execute(準備したSQLを実行する)オプションに記載されたSQLを実行

--execute="SELECT * from users;"

実行結果を出力したいファイルにリダイレクト

> hoge.csv


リダイレクトとは??

ここでのリダイレクトの意味は出力先を変えてあげることです。

> hoge.csv

この部分は、SQL文の結果をMYSQLの中ではなくhoge.csvに出力することを

指示しています。

通常、webでは特定のページから別のページに転送することリダイレクトといいますが、

コマンドなどを使用する際は入力や出力の向きを変えることもリダイレクトといいます。


CSVファイルをDBに流し込む

mysql -u root -p user_db

LOAD DATA LOCAL INFILE "hoge.csv" INTO TABLE users FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';

CSVファイルのインポートはLOAD DATA INFILE構文を使用します。

mysql、dbに接続し以下のSQLを実行します。

LOAD DATA LOCAL INFILE "ファイル名" INTO TABLE テーブル名 FIELDS TERMINATED BY '区切り文字' OPTIONALLY ENCLOSED BY '囲み文字';

区切り文字はCSVファイルなのでカンマです。

囲み文字は""で囲んでいるフィールドがあれば記載します。

無ければOPTIONALLY ENCLOSED BYは記載しなくても大丈夫です。