この記事では、MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートする方法についてご説明します。
【前準備】MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートする前にするべきこと
MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートする前にするべきことがあります。
- MySQLサーバーの「local_infile」の値を「1」に設定する
- MySQLクライアントにログインする時に「——local_infile=1」のオプションを付ける
①MySQLサーバーの「local_infile」の値を「1」に設定する
1つ目はMySQLサーバーの「local_infile」の値を「1」に設定することです。
「local_infile」の値を「1」に設定しないと、MySQLサーバーがCSVファイルの読み込みを拒否してしまいます。
なので、CSVファイルのデータをインポートすることができません。
MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートするときはMySQLサーバーの「local_infile」の値を「1」に設定します。
ただし、「local_infile」の値を「1」に設定するにはいくつか確認すべき確認事項があります。
- サーバーの管理者に「local_infile」の値を変更してよいか確認する
- 現状「local_infile」がどんな値に設定されているかを確認する
MySQLサーバーの設定値を許可なく変更することはNG行為なので、サーバーの管理者に事前に確認をするようにしましょう。
また、MySQLサーバーの値を変えたあとは値をそのままにしてはいけないので、変更前の設定値を必ず確認して戻せるよう現状「local_infile」がどんな値に設定されているかを確認しましょう。
以上の確認作業を必ず行ってから本記事内の手順を進めてください。
以上を踏まえて、「local_infile」の値を変更する際は自己責任でお願いします。
「local_infile」の値を変更する手順は次の通りです。
(1)MySQLクライアントからMySQLサーバーにログインする
MySQLクライアントからMySQLサーバーにログインします。
(2)コマンド「SELECT @@local_infile;」を実行する
コマンド「SELECT @@local_infile;」を実行します。
(3)「local_infile」の設定値が表示される
「local_infile」の設定値が表示されます。
以上で「local_infile」の設定値が何か確認することができました。
この値を必ずメモしておき、インポート処理を行った後に戻せるようにしましょう。
ちなみに、画像では値が0となっていますが、0だとMySQLサーバーがCSVファイルの読み込みを拒否してしまいます。
(4)コマンド「SET GLOBAL local_infile=1;」を実行する
コマンド「SET GLOBAL local_infile=1;」を実行します。
(5)「local_infile」の設定値が変更される
「local_infile」の設定値が変更されました。
(6)「local_infile」の設定値変更後に設定値が「1」になっているかを確認するため、コマンド「SELECT @@local_infile;」を実行する
「local_infile」の設定値変更後に設定値が「1」になっているかを確認するため、コマンド「SELECT @@local_infile;」を実行します。
「SELECT @@local_infile;」を実行した結果、「local_infile」の設定値が「1」と表示されていれば手順完了です。
②MySQLクライアントにログインする時に「——local_infile=1」のオプションを付ける
2つ目はMySQLクライアントにログインする時に「——local_infile=1」のオプションを付けることです。
※分かりにくくて申し訳ありませんが、localの文字の前に付けるハイフン「-」は2つです。(下の画像を参考にしてください)
以上でMySQLクライアントにログインできました。
ここまでで前準備が完了です。
CSVファイルのデータをMySQLのテーブルにインポートしてみる
ここからはCSVファイルのデータをMySQLのテーブルにインポートしてみます。
CSVファイルとインポート先のテーブルの例
インポートを行うため、事前に次のCSVファイルを用意しました。
CSVファイルには10件のデータが存在しています。
また、CSVファイルは「data.csv」という名前で、以下の通り「C:¥work¥test」配下に格納しています。
また、インポート先のテーブルは次の通りです。
このテーブルに、CSVファイルにある10件のデータをインポートします。
試しに、以下のように1件もデータが無い状態を用意しておきました。
CSVファイルのデータをMySQLのテーブルにインポートするコマンドと実行
MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートするコマンドは次の通りです。
LOAD DATA LOCAL INFILE ‘/work/test/data.csv’ -- 「C:¥work¥test」配下にあるCSVファイル「data.csv」を、テーブルに挿入します INTO TABLE testdb.syain -- CSVファイルのデータを挿入するテーブルの名前を指定します。今回はデータベース「testdb」にあるテーブル「syain」を指定 FIELDS TERMINATED BY ‘,’ -- フィールドの区切り文字を指定します。CSVファイルのデータはカンマ「,」区切りなのでカンマ「,」を指定します LINES TERMINATED BY ‘\n’ -- 行の区切り文字を指定します。この場合は、改行文字「\n」 が行の区切り文字になります IGNORE 0 LINES -- 最初の0行を無視する(ヘッダが無く、データが1行目から始まる場合は0とする) (id, name, address, age); -- CSVファイルの各列が、テーブルの「id」、「name」、「address」、「age」という列に対応しており、 「id」, 「name」, 「address」, 「age」の 4列にCSVファイルのデータを挿入します。
MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートするコマンドを実行すると次の結果が表示されます。
インポート実行結果の確認
インポートが実行されたのでその結果として、インポート先のテーブルの中身を見てみます。
インポートを行う前はインポート先のテーブルには1件もデータが無い状態でしたが、テーブルの中身を再度見てみると以下のように10件存在していることが確認できます。
以上で、MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートすることができました。
最後に
この記事では、MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートする方法についてご説明しました。
MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートするには以下の点を行うようにしましょう。
- サーバーの管理者に「local_infile」の値を変更してよいか確認する
- 現状「local_infile」がどんな値に設定されているかを確認する
MySQLサーバーへのCSVファイルのデータ読み込み許可についてはMySQLサーバーの「local_infile」の値を変更する必要があるので、変更前には必ずサーバー管理者に変更してよいか確認しましょう。
また、MySQLサーバーの「local_infile」の値を変更する際は、事前に「local_infile」の値を確認しておきましょう。
値が分からないと変更前の値に戻せなくなってしまいますからね。
以上の点に気を付けて、MySQLクライアントを使ってCSVファイルのデータをMySQLのテーブルにインポートするときは本記事を参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。