4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQL8のテーブルにCSVファイルをまるごとインポートする手順

Last updated at Posted at 2021-01-06

やりたいこと

  • MySQL8のテーブルにCSVファイルをまるごとインポートしたい。
  • mysqlのコマンドラインを使いたい。

環境

  • CentOS8+MySQL8

DBの構成

CREATE DATABASE yamato CHARACTER SET utf8;

usersテーブルが下記の構造で作成済みであるとする。

CREATE TABLE `users` (
  `id` bigint unsigned NOT NULL,
  `gender` varchar(255) NOT NULL,
  `age` int unsigned NOT NULL,
  `marriage` varchar(255) NOT NULL,
  `pref` varchar(255) NOT NULL,
  `job` varchar(255) NOT NULL,
  `hobby` varchar(255) NOT NULL,
  `y` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

この、yamato.users に、CSVファイルからデータをインポートしたい。

CSVファイルの構造

users.csv

文字コードはutf8とする。

id,性別,年齢,婚姻,都道府県,職業,趣味,y
1,男性,39,既婚,愛媛県,フリーランス,映画,no
2,男性,79,既婚,滋賀県,会社役員,アウトドア,no
3,男性,29,未婚,京都府,無職,音楽,no
4,女性,28,既婚,新潟県,会社役員,テレビゲーム,no
5,女性,73,未婚,青森県,会社員,映画,no
6,男性,71,未婚,石川県,学生,オートバイ,yes
7,女性,78,未婚,群馬県,学生,読書,no
8,女性,65,既婚,徳島県,フリーランス,映画,no
9,女性,34,既婚,宮崎県,自営業,アウトドア,no
10,女性,69,既婚,茨城県,会社員,映画,no
11,男性,67,既婚,山梨県,フリーランス,音楽,no

取り込み

CSVファイルの一行目(ヘッダ)を削除する。

id,性別,年齢,婚姻,都道府県,職業,趣味,y

をviで削除する。ちなみに、

LOAD DATA LOCAL INFILE

実行時、末尾に

IGNORE 1 LINES

を付与すれば、ヘッダ一行を飛ばしてくれるので、その場合はviで削除しなくてもOK。

CSVファイルを下記に置く。

/home/yamato/csv/users.csv

コマンドラインからMySQLに接続する。

MySQLにrootで接続する。
--local-infile=1 を付与しないと取り込めないので注意する。

mysql --local-infile=1 -u root -p

下記コマンドで取り込む。

mysql>

SET GLOBAL local_infile=on; 
load data local infile "/home/yamato/csv/users.csv" into table yamato.users fields terminated by ',' optionally enclosed by '"';

結果を確認する。CSVの5万行がすべて正常に取り込まれた。

Query OK, 50000 rows affected (0.80 sec)
Records: 50000  Deleted: 0  Skipped: 0  Warnings: 0

テーブルの中身を確認する。

mysql> select * from users limit 10;
+----+--------+-----+----------+-----------+--------------------+--------------------+-----+
| id | gender | age | marriage | pref      | job                | hobby              | y   |
+----+--------+-----+----------+-----------+--------------------+--------------------+-----+
|  1 | 男性   |  39 | 既婚     | 愛媛県    | フリーランス       | 映画               | no  |
|  2 | 男性   |  79 | 既婚     | 滋賀県    | 会社役員           | アウトドア         | no  |
|  3 | 男性   |  29 | 未婚     | 京都府    | 無職               | 音楽               | no  |
|  4 | 女性   |  28 | 既婚     | 新潟県    | 会社役員           | テレビゲーム       | no  |
|  5 | 女性   |  73 | 未婚     | 青森県    | 会社員             | 映画               | no  |
|  6 | 男性   |  71 | 未婚     | 石川県    | 学生               | オートバイ         | yes |
|  7 | 女性   |  78 | 未婚     | 群馬県    | 学生               | 読書               | no  |
|  8 | 女性   |  65 | 既婚     | 徳島県    | フリーランス       | 映画               | no  |
|  9 | 女性   |  34 | 既婚     | 宮崎県    | 自営業             | アウトドア         | no  |
| 10 | 女性   |  69 | 既婚     | 茨城県    | 会社員             | 映画               | no  |
+----+--------+-----+----------+-----------+--------------------+--------------------+-----+
10 rows in set (0.00 sec)

mysql> select count(id) from users;
+-----------+
| count(id) |
+-----------+
|     50000 |
+-----------+
1 row in set (0.06 sec)
4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?