質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • MySQL

    6016questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Ubuntu

    1487questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

【MySQL】LOAD DATA INFILE でCSVデータをインポートしたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,078

mulberryfields

score 752

CSVのデータをMySQLにインポートしたいです。
OSは、ubuntuを利用しています。

LOAD DATA INFILE 構文を利用しようとしました。
http://dev.mysql.com/doc/refman/5.6/ja/load-data.html

「cls_site」というテーブルに、下記のフィールドがあります。
+-----------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id         | int(11)        | NO   | PRI | NULL    |       |
| name      | varchar(100) | NO   |     | NULL    |       |
| index      | varchar(100) | YES  |     | NULL    |       |
| address   | varchar(100) | YES  |    | NULL    |       |
| issuedate| date           | YES  |       | NULL    |       |
| startdate | date           | YES  |       | NULL    |       |
| enddate  | date           | YES  |       | NULL    |       |
| owner_id| int(11)       | YES  | MUL | NULL  |        |
| rep_id     | int(11)       | YES  | MUL | NULL  |       |
+-----------+--------------+------+-----+---------+-------+

CSVファイルは、「list3.csv」というファイルに、
2515,AAA工事,
2604,BBB新築工事,
・・・
・・・.
という感じで、300行ぐらい縦に続いています。
CSVファイルに書いてあるのは、上記「cls_site」テーブルでいうidとnameであり、
このidとnameを読み込ませたいと考えました。
現状、idだけ全て読み込まれた状況で、nameについては読み込まれませんでした。

load data local infile "list3.csv" replace into table cls_site fields terminated by ',' lines terminated by '\r\n' (id,name) ;
として、idとnameを読み込ませたいのですが、うまく行かないです。
Query OK, 2 rows affected (0.10 sec)
Records: 1  Deleted: 1  Skipped: 0  Warnings: 0
となり、実際に見てみると工事名が登録できていないです。

一方で、
下記のとおり1行だけ記載した、list2.csvというファイルを準備して、実行すると、うまく行きました。
2515,AAA工事,
mysql> load data local infile "list2.csv" replace into table cls_site fields terminated by ',' (id,name) ;
Query OK, 4 rows affected, 2 warnings (0.15 sec)
mysql> show warnings;
+---------+------+------------------------------------------------------+
| Level   | Code | Message                                              |
+---------+------+------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column 'id' at row 2 |
| Warning | 1261 | Row 2 doesn't contain data for all columns           |
+---------+------+------------------------------------------------------+
2 rows in set (0.00 sec)
Records: 2  Deleted: 2  Skipped: 0  Warnings: 2
warningsが出ているものの、実際に見てみると、しっかりデータが入っています。
複数行の場合にうまくいかないということは、改行の扱い(lines)が間違っているのでしょうか?

お分かりの方、ご教示頂ければ幸いです。
どうぞ、よろしくお願いいたします。


【追記】
kiriさん、ありがとうございます。
下記の通り、やってみました。
mysql> load data local infile "list3.csv" replace into table cls_site fields terminated by ',' lines terminated by '\n' (id,name);
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`project`.`cls_invoice`, CONSTRAINT `cls_invoice_site_id_id_761f60d2bf350e0d_fk_cls_site_id` FOREIGN KEY (`site_id_id`) REFERENCES `cls_site` (`id`))
上記のエラーが出ましたが、
これは、LOAD DATA INFILEの問題とは別の問題でしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kiri

    2015/07/17 17:50

    OSは何でしょうか?改行ですが'\r\n' ではなくて '\n'は試しましたか?

    キャンセル

  • mulberryfields

    2015/07/17 18:06

    OSはlinux(ubuntu)です。

    キャンセル

回答 1

checkベストアンサー

0

追記のエラーについてですが、こちらを参考にしてみてはいかがでしょう?
テーブルに設定している外部キーに関するエラーのようです。
http://www.atmarkit.co.jp/ait/articles/0707/17/news113_3.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/17 19:11

    f-hanakoさん、ありがとうございます。
    外部キーに関するエラーはまだ解決していませんが、ご教示頂いたサイトを参考にして、少し調べます。

    kiriさん、ご教示頂いた方法で、少なくとも途中まではうまくいきました。
    なぜか途中からエラーが出るようになってしまいましたが、上記のとおり外部キーに関する別の問題が生じているものと思われます。
    私が当初疑問に思っていた件は、下記コードで解決することがわかりましたので、この質問については、一旦解決とさせていただきます。
    load data local infile "list3.csv" replace into table cls_site fields terminated by ',' lines terminated by '\n' (id,name);
    ありがとうございました。

    キャンセル

  • 2015/07/17 19:55

    外部キーに関するエラーも解決できました。
    外部キーとして利用している他のテーブルにデータが入っていたのが原因でした。
    ご教示いただき、ありがとうございました。

    キャンセル

関連した質問

  • 受付中

    SQL について

    ご質問いたします。 MySQLにてCSVファイルを読み込む際、「id」フィールドを( int auto_increment)でインクリメントしつつ 「name」フィールドのみにC

  • 受付中

    大量データ処理について

    ショッピングサイトのエンジニアをやってます。 以下質問がございます。 ①月の受注データ(10万件ほど)をselectして、 ②別に読み込んだcsvファイルのデータと1件ずつ突合チ

  • 受付中

    mysql;csvファイルの読み込み

    mysqlで以下のようなcsvファイルを読み込ませたいです. 00000xx_000000x,http://・・・,,,,, 00000xx_000000x,http://・・・

  • 受付中

    PHP 受信したファイルをSQLに入れる

    Android端末からcsvを受け取り、内容をSQLに入れるコードを書いています。 ファイル名を変数にした所、うまく動作しなくなりました。 (固定のファイル名ではアップロードできて

  • 解決済

    特定のカラムの存在確認

    mysqlを利用して特定のカラム(複数)の存在確認をしたいと考えています。 確認したいカラムが一つであれば SHOW COLUMNS FROM hogeTable LIKE 'h

  • 解決済

    mysqlにcsvデータの取込

    MySQLのデータベースの中にテーブルが50程あるのですが、 そのテーブルごとにcsvファイルを作成していきたいと考えています。 その際、SQL文で50行製作するよりも、 SHOW

  • 解決済

    CSVファイルを読み込み、DBにINSERT

    CSVファイルは カラム1,カラム2,カラム3 data1-1,data1-2,data1-3 data2-1,data2-2,data2-3 ..... と続きます

  • 解決済

    バッチにてSQLを実行→ログに書き込み

    実現したいこと WindowsバッチにてMySQLのSQL文をインラインで書いて実行、ログファイルに実行結果を書き込みたいです。 該当のソースコード MYSQL -uus

同じタグがついた質問を見る

  • MySQL

    6016questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Ubuntu

    1487questions

    Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。