1. サーバーでファイル読み込みを許可する
SQLにログインして、以下を実行。
SHOW GLOBAL VARIABLES LIKE 'local_infile';
ValueがOFFになっていたら、以下でONに変更する。
SET GLOBAL local_infile = 1;
この設定はMySQLサーバーを再起動すると元に戻ってしまうため、永続的に設定を変更したい場合は、MySQLの設定ファイル(my.cnfまたはmy.ini)の[mysqld]セクションにlocal_infile=1と追記する。
2. MySQL8.0以降で認証プラグインにフラグをたてる&ファイル読み込み使用状態でログイン
mysql --local-infile=1 --enable-cleartext-plugin -u [ユーザー名] -p [データベース名]
e.g.,
mysql --local-infile=1 --enable-cleartext-plugin -u root -p dwh12
3. ログイン後にインポートする
LOAD DATA LOCAL INFILE '/path/to/your/csv.csv'
INTO TABLE [テーブル]
FIELDS TERMINATED BY ','
ENCLOSED BY ""
LINES TERMINATED BY '\n'
(カラム1, カラム2, カラム3);
e.g.,
LOAD DATA LOCAL INFILE '/path/to/your/students.csv'
INTO TABLE 学生情報
FIELDS TERMINATED BY ','
ENCLOSED BY ""
LINES TERMINATED BY '\n'
(学籍番号, 氏名, 氏名(カタカナ), 性別, 生年月日);
※テーブルのカラムを記入しなくてもいけるが、書いた方が安全(CSVとテーブルのカラムの対応付を明確に示すことで、正しい場所にデータを対応付けられる・誰がクエリを読んでも内容が分かりやすい・将来テーブルの列が変更されても、このクエリは正しく動作する)(CSVとテーブルのカラムの順番が異なる場合、ここに書いて指定する必要がある)
※csvのパスは~表記などで省略しない方が安全(チルダは普段はシェルが処理するが、mysqlクライアントが解釈できるとは限らないため)
4. (テーブルのカラムを省略)
LOAD DATA LOCAL INFILE '/users/user/Desktop/csv_files_mac/得点.csv'
INTO TABLE 得点
FIELDS TERMINATED BY ','
ENCLOSED BY ""
LINES TERMINATED BY '\n';