MariaDB / MySQLでCSVをインポート・エクスポートする方法|LOAD DATA INFILEとINTO OUTFILEの実例解説
MariaDBやMySQLでCSVファイルをインポート・エクスポートするには、LOAD DATA INFILE
や INTO OUTFILE
を使うのが一般的です。
このページでは、CSVからテーブルへの取り込みと、テーブルからCSVへの書き出しを、ENCLOSED BY
や TERMINATED BY
などのオプション指定を含めて、実際のSQL例でわかりやすく解説します。
「mariadb csv import」「mysql enclosed by」「local_infile」などのキーワードでお探しの方におすすめです。
CSVファイルのテーブル取り込み(インポート)
例えば取り込み先テーブル構造が以下とします。
CREATE TABLE IF NOT EXISTS t_csv(id INT, name VARCHAR(255), age INT);
カラム名 | 型 |
---|---|
id | INT |
name | VARCHAR(255) |
age | INT |
「insert.csv」ファイルが以下とします。
"id","name","age" 1,"イシダ",24 2,"カワサキ",31 3,"ソノダ",41
「LOAD DATA INFILE」を使うと「insert.csv」ファイルを「t_csv」テーブルに取り込むことが出来ます。
MariaDB(MySQL)サーバーがローカルファイルの読み込みを許可していない場合は
SET GLOBAL local_infile=on;
で一時的に許可設定にすることが出来ます。
SET GLOBAL local_infile=on;
LOAD DATA INFILE '/ディレクトリ/insert.csv'
INTO TABLE t_csv
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;
オプションの説明
FIELDS TERMINATED BY ',' | フィールドの区切り文字を指定します |
FIELDS ENCLOSED BY '"' | クォートを指定します |
LINES TERMINATED BY '\r\n' | 行の終端記号(改行)を指定します |
IGNORE 1 ROWS | 最初から1行目を無視(ヘッダー行) |
FIELD ESCAPED BY 'エスケープ文字' |
エスケープ文字の指定 デフォルトは バックスラッシュ(半角エン記号「\」) |
MariaDB [db_test]> select * from t_csv; +------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | イシダ | 24 | | 2 | カワサキ | 31 | | 3 | ソノダ | 41 | +------+--------------+------+
テーブルのCSVファイルへの書き出し(エクスポート)
テーブルをCSVファイルに保存するには INTO OUTFILE を使います。
カラム名は出力できません。
SELECT * FROM t_csv
INTO OUTFILE '/ディレクトリ/output.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
カラム名も出力したい場合はUNIONを使うしかないでしょう。
SELECT 'id','name','age' UNION SELECT * FROM t_csv INTO OUTFILE '/ディレクトリ/output.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
output.csv
"id","name","age" "1","イシダ","24" "2","カワサキ","31" "3","ソノダ","41"