CSVファイルからDBにデータを登録する

Jul 11, 2009   #mysql  :

MySQL初心者入門講座: Step4・ファイルからデータを取り込む」を参考して、CSVファイルからデータをDBに登録してみました。

作成するテーブル

作成するのは次のようなテーブルです:

項目番号 店名 住所
1 喫茶室ルノアール 池袋東口店 東京都豊島区東池袋1-40-2

用意したCSVファイル

用意したのは次のcsvファイルです:

1, 喫茶室ルノアール 池袋東口店, 東京都豊島区東池袋1-40-2
2, 喫茶室ルノアール 池袋パルコ横店, 東京都豊島区東池袋1-42-8
3, 喫茶室ルノアール 巣鴨駅前店, 東京都豊島区巣鴨1-15-1
4, 喫茶室ルノアール 本郷三丁目店, 東京都文京区本郷4-37-13
5, 喫茶室ルノアール 大崎ニューシティ店, 東京都品川区大崎1-6-4
6, 喫茶室ルノアール 中野北口店, 東京都中野区中野5-61-2
7, 喫茶室ルノアール 中野サンプラザ前店, 東京都中野区中野5-67-5
8, 喫茶室ルノアール 銀座2丁目店, 東京都中央区銀座2-7-18
9, 喫茶室ルノアール 西銀座店, 東京都中央区銀座2-5-5
10, 喫茶室ルノアール ニュー銀座店, 東京都中央区銀座2-8-15
11, 喫茶室ルノアール 銀座昭和通り店, 東京都中央区銀座2-11-6
12, 喫茶室ルノアール 銀座松屋通り店, 東京都中央区銀座3-3-11
13, 喫茶室ルノアール 銀座6丁目店, 東京都中央区銀座6-12-10
14, 喫茶室ルノアール 歌舞伎座前店, 東京都中央区銀座5-15-1
15, 喫茶室ルノアール 日本橋高島屋前店, 東京都中央区日本橋2-3-6
16, CafeRenoir 日本橋三越前店, 東京都中央区日本橋本町1-1
17, 喫茶室ルノアール 東京駅八重洲北口店, 東京都中央区八重洲1-6-17
18, CafeRenoir ニュー八重洲北口店, 東京都中央区八重洲1-7-4
19, 喫茶室ルノアール 大森駅前店, 東京都大田区大森北1-1-10
20, 喫茶室ルノアール 蒲田西口店, 東京都大田区西蒲田8-1-7
21, CafeRenoir 御徒町春日通り店, 東京都台東区上野6-1-1
22, 喫茶室ルノアール 上野しのばず口店, 東京都台東区上野4-10-7
23, CafeRenoir 上野公園前店, 東京都台東区上野2-13-13
24, 喫茶室ルノアール 日暮里谷中店, 東京都台東区谷中7-20-6
25, 喫茶室ルノアール 市ヶ谷駅前店, 東京都千代田区五番町
26, 喫茶室ルノアール 飯田橋西口店, 東京都千代田区富士見2-2-6
27, 喫茶室ルノアール 水道橋西口店, 東京都千代田区三崎町3-6-13
28, 喫茶室ルノアール 神田西口店, 東京都千代田区内神田2-9-9
29, 喫茶室ルノアール 神田北口駅前店, 東京都千代田区内神田3-21-8
30, 喫茶室ルノアール 神田南口駅前店, 東京都千代田区鍛冶町2-1-4
31, CafeRenoir 日比谷店, 東京都千代田区有楽町1-6-1
32, 喫茶室ルノアール ニュー秋葉原店, 東京都千代田区外神田1-16-10
33, 喫茶室ルノアール 秋葉原店, 東京都千代田区外神田1-11-6
34, CafeRenoir 秋葉原昭和通り口店, 東京都千代田区神田佐久間町1-18
35, 喫茶室ルノアール 阿佐ヶ谷駅前店, 東京都杉並区阿佐ヶ谷南2-14-10
36 喫茶室ルノアール 高円寺北口駅前店, 東京都杉並区高円寺北2-4-4
37, 喫茶室ルノアール 新宿西口エステックビル店, 東京都新宿区西新宿1-24-1
38, 喫茶室ルノアール 新宿西口駅前店, 東京都新宿区西新宿1-17-1
39, 喫茶室ルノアール 新宿ハルク横店, 東京都新宿区西新宿1-5-11
40, 喫茶室ルノアール 西新宿西鉄イン店, 東京都新宿区西新宿7-23-2
41, 喫茶室ルノアール 新宿3丁目ビッグスビル店, 東京都新宿区新宿2-19-1
42, 喫茶室ルノアール ニュー新宿3丁目店, 東京都新宿区新宿3-4-1
43, 喫茶室ルノアール 市ヶ谷外堀通り店, 東京都新宿区市谷田町1-3
44, 喫茶室ルノアール 四谷店, 東京都新宿区四谷1-3-22
45, 喫茶室ルノアール 新宿区役所横店, 東京都新宿区歌舞伎町1-3-5
46, 喫茶室ルノアール 新宿歌舞伎町店, 東京都新宿区歌舞伎町1-14-4
47, 喫茶室ルノアール 西武新宿駅前店, 東京都新宿区歌舞伎町1-26-6
48, 喫茶室ルノアール 新宿大ガード店, 東京都新宿区西新宿7-1-1
49, 喫茶室ルノアール 新宿小滝橋通り店, 東京都新宿区西新宿7-9-7
50, 喫茶室ルノアール 大久保店, 東京都新宿区百人町1-18-8
51, 喫茶室ルノアール 新大久保駅前店, 東京都新宿区百人町2-11-25
52, 喫茶室ルノアール ニュー高田馬場店, 東京都新宿区高田馬場2-18-6
53, 喫茶室ルノアール 高田馬場早稲田通り店, 東京都新宿区高田馬場2-14-2
54, 喫茶室ルノアール 高田馬場ビッグボックス横店, 東京都新宿区高田馬場1-34-8
55, 喫茶室ルノアール 高田馬場第一店, 東京都新宿区高田馬場1-34-12
56, 喫茶室ルノアール 代々木西口駅前店, 東京都渋谷区代々木1-30-6
57, 喫茶室ルノアール 千駄ヶ谷駅前店, 東京都渋谷区千駄ヶ谷1-30-8
58, 喫茶室ルノアール 渋谷南口店, 東京都渋谷区桜丘町15-15
59, 喫茶室ルノアール 渋谷シオノギビル店, 東京都渋谷区渋谷2-17-5
60, 喫茶室ルノアール 渋谷東急ハンズ前店, 東京都渋谷区宇田川町36-2
61, 喫茶室ルノアール 渋谷宮下公園店, 東京都渋谷区渋谷1-16-14
62, 喫茶室ルノアール 西日暮里第一店, 東京都荒川区西日暮里5-23-6
63, 喫茶室ルノアール 日暮里東口店, 東京都荒川区東日暮里5-51-11
64, 喫茶室ルノアール 赤坂見附店, 東京都港区赤坂3-10-2
65, 喫茶室ルノアール 新橋サンルート店, 東京都港区新橋4-10-2
66, 喫茶室ルノアール 新橋第一ホテル横店, 東京都港区新橋1-17-2
67, 喫茶室ルノアール 田町三田口駅前店, 東京都港区芝5-34-7
68, 喫茶室ルノアール 芝大門店, 東京都港区芝大門2-3-1
69, 喫茶室ルノアール 品川港南口店, 東京都港区港南2-3-29
70, 喫茶室ルノアール 品川高輪口店, 東京都港区高輪3-25-22
71, 喫茶室ルノアール 亀戸駅前店, 東京都江東区亀戸2-20-7
72, 喫茶室ルノアール 金町店, 東京都葛飾区東金町1-42
73, 喫茶室ルノアール 立川南口店, 東京都立川市柴崎町3-4-14
74, 喫茶室ルノアール 立川駅前店, 東京都立川市曙町2-13-10
75, 喫茶室ルノアール 立川店, 東京都立川市曙町2-9-1
76, 喫茶室ルノアール 三鷹北口駅前店, 東京都武蔵野市中町1-6-7
77, 喫茶室ルノアール 横浜元町店, 神奈川県横浜市中区元町1-18
78, 喫茶室ルノアール 横浜関内駅前店, 神奈川県横浜市中区港町2-6
79, 喫茶室ルノアール 横浜伊勢佐木町店, 神奈川県横浜市中区伊勢佐木町2-66
80, 喫茶室ルノアール 鶴見駅前店, 神奈川県横浜市鶴見区鶴見中央1-3-3
81, 喫茶室ルノアール 鎌倉駅前店, 神奈川県鎌倉市小町1-6-19
82, 喫茶室ルノアール 大船店, 神奈川県鎌倉市大船1-7-1
83, 喫茶室ルノアール 川崎銀柳街店, 神奈川県川崎市川崎区駅前本町3-3
84, 喫茶室ルノアール 京急川崎駅前店, 神奈川県川崎市川崎区砂子1-1-10
85, 喫茶室ルノアール 箱根湯本駅前店, 神奈川県足柄下郡箱根町湯本白石下706-35
86, 喫茶室ルノアール 川越店, 埼玉県川越市脇田町103
87, 喫茶室ルノアール 本八幡店, 千葉県市川市八幡2-6-15

とりあえず実践

以下のようにして登録してみたのですが、なぜかうまくいきませんでした。

kazu634@kazu634-desktop% mysql -u root -p                                  ~/work/googlemaps [3036]
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 59
Server version: 5.0.75-0ubuntu10.2 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE TABLE Shop (
-> SHOP_CD INT(3),
-> SHOP_NAME VARCHAR(50),
-> PRIMARY KEY(SHOP_CD));
Query OK,  rows affected (.01 sec)
mysql> SHOW TABLES;
+------------------+
| Tables_in_sample |
+------------------+
| Shop             |
+------------------+
1 row in set (.00 sec)
mysql> use Shop;
ERROR 1049 (42000): Unknown database 'Shop'
mysql> SELECT * FROM Shop;
Empty set (.00 sec)
mysql> LOAD DATA INFILE "data.csv"
-> INTO TABLE Shop FIELDS TERMINATED BY ","
-> LINE TERMINATED BY "\n";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LINE TERMINATED BY "\n"' at line 3
mysql> LOAD DATA INFILE "data.csv"
-> INTO TABLE Shop FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\n";
ERROR 29 (HY000): File '/var/lib/mysql/sample/data.csv' not found (Errcode: 2)
mysql> LOAD DATA INFILE "~/work/googlemaps/data.csv"
-> INTO TABLE Shop FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\n";
ERROR 13 (HY000): Can't get stat of '/etc/mysql/work/googlemaps/data.csv' (Errcode: 2)
mysql> LOAD DATA INFILE "/home/kazu634/work/googlemaps/data.csv"
    -> INTO TABLE Shop FIELDS TERMINATED BY ","
    -> LINES TERMINATED BY "\n";
ERROR 29 (HY000): File '/home/kazu634/work/googlemaps/data.csv' not found (Errcode: 13)
mysql> LOAD DATA INFILE "/home/kazu634/work/googlemaps/data.csv"
    -> INTO TABLE Shop FIELDS TERMINATED BY ",";
ERROR 29 (HY000): File '/home/kazu634/work/googlemaps/data.csv' not found (Errcode: 13)

そこで調べてみました

どうやらカレントパス上のファイルを指定するためには、「LOAD DATA LOCAL INFILE」というように指定すればいいようです。すると、以下のようになって成功しました。

mysql> load data local infile "data.csv" into table Shop;
Query OK, 87 rows affected, 174 warnings (.00 sec)
Records: 87  Deleted:   Skipped:   Warnings: 174
mysql> exit
Bye

まとめると

カレントパス上のファイルを指定してDBに登録するためには次のように行います:

mysql> LOAD DATA LOCAL INFILE "data.csv" INTO TABLE Shop
-> INTO TABLE Shop FIELDS TERMINATED BY ",";