【MySQL】CSVファイルのインポート方法について
◇はじめに
本記事では、CSVファイルをMySQLテーブルにインポートする方法について解説していきます。この記事が少しでも参考になれば幸いです。
◇そもそもCSVファイルとは?
正式名称は「comma separated values」というもので、この名前の通り、カンマ(,)で区切って書かれたテキストファイルの事です。無駄な情報が無く情報がシンプルなデータファイルです。類似したものでは、タブで区切られた「tab separated values=TSV」ファイルやスペースで区切られた「space separated values(SSV )」ファイルなどがあり、これらのようなフォーマットはデータ(値)の移行やバックアップなどに使用されます。
■CSVファイルの中身の例
No01,佐藤,21
No02,田中,20
No03,安藤,32
No04,木村,27
◇MySQLのCSVファイルインポート方法について
◇インポート前の準備
それでは、CSVファイルをインポートする事前の準備についてご紹介します。
①MySQLデのータベースサーバーに接続するアカウントにファイルの読み書き権限があること。
ファイルの読み書きについてはセキュリティの面でも、権限を持たないとそもそもおこなうことができません。簡単な方法としてはMySQLの「my.ini」ファイルから設定する方法がありますが、是非ネットなどで調べて権限を設定してみてください。
②CSVファイルのデータをインポートする先のデータベーステーブルを用意すること。
今回は【tb1】というテーブルを用意し、事前にいくつかの値を登録しておきました。
■事前に用意したテーブルのカラム情報↓mysql> DESC tb1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| number | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
■テーブルの中身↓
mysql> SELECT * FROM tb1;
+--------+-------+------+
| number | name | age |
+--------+-------+------+
| A001 | 佐藤 | 21 |
| A002 | 田中 | 20 |
| A003 | 安藤 | 32 |
| A004 | 木村 | 27 |
+--------+-------+------+
③テーブルの列数と各列のデータの種類と一致するデータを含む CSV ファイルを用意すること。
試しに簡単なCSVファイルを作成するにはGoogleスプレッドシートを使用し、データベースのテーブルに見立ててシートの左寄りに値を埋めていき、別名保存でファイル形式をCSVファイルと指定し保存しておきます。
今回は【test.csv】というファイル名でデスクトップに保存したものを使用していきます。
+---+------+------+----+
| ◢| A | B | C |
+--------+-------------+
| 1 | A005 | 田村 | 33 |
+---+------+------+----+
| 2 | A006 | 清水 | 42 |
+---+------+------+----+
| 3 | A007 | 中川 | 39 |
+---+------+------+----+
◇CSVファイルのインポート
それでは早速CSVファイルをインポートしてみましょう。インポートの書式は以下のようになります。
■CSVファイルインポートの書式↓LOAD DATA INFILE 'ファイル名' INTO TABLE テーブル名 FIELDS TERMINATED BY ',';
上記の書式にファイル名とテーブル名を記述していきます。
ファイル名・・・この部分には”ファイルのパス”を記述するのですがフォルダ指定の際の「¥」はすべて「/」にして記述しましょう。
例)「C:¥Users¥oshigoto¥Desktop¥test.csv」⇒「C:/Users/oshigoto/Desktop/test.csv」
テーブル名・・・先程用意した「tb1」をあてはめます。
LOAD DATA INFILE 'C:/Users/oshigoto/Desktop/test.csv' INTO TABLE tb1 FIELDS TERMINATED BY ',';
実際に実行すると以下のようになります。
mysql> LOAD DATA INFILE 'C:/Users/oshigoto/Desktop/test.csv' INTO TABLE tb1 FIELDS TERMINATED BY ',';
Query OK, 4 rows affected (0.01 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
クエリOKと表示されました。確認のためにテーブルの中身を表示させます。
mysql> SELECT * FROM tb1;
+--------+-------+------+
| number | name | age |
+--------+-------+------+
| A001 | 佐藤 | 21 |
| A002 | 田中 | 20 |
| A003 | 安藤 | 32 |
| A004 | 木村 | 27 |
| A005 | 田村 | 33 |
| A006 | 清水 | 42 |
| A007 | 中川 | 39 |
+--------+-------+------+
問題なくCSVデータ内の値が追加されていることが分かります。
◇おわりに
いかがでしたでしょうか。
例え異なるデータベースであっても、CSVファイルを使えばデータを移行させたりすることができる、大変便利な手法です。この記事が少しでも参考になっていれば幸いです。最後まで読んでいただきありがとうございました。