• ベストアンサー

mysqlでCSVインポートでトランザクション管理出来る

只今、mysqlを使用して開発しております。 行き詰まっておりまして 大変申し訳ありませんが、ご教授の程、よろしくお願いいたします。 要件は以下になります。 ・CSVファイルデータをインポートする。 ・CSVファイルは複数なので、全ての処理が終わった段階でコミット・もしくはロールバックする。 (トランザクション管理が出来ればよいです。) ※LOAD DATA INFILEでトランザクション管理しようとしたのですが LAODのトランザクション管理は5.1系じゃないと出来ないようですので、 出来ませんでした。 mysqlのバージョン :5.0.24

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がるです。 んと…「膨大な量」とのことなので、別のラインで。 たとえば ・仮テーブルを用意する ・「仮テーブルに対して」個々にCSVをインポートしていく ・すべてのインポートが終わって  ・もしすべて問題なく処理できたら、begin tranして仮テーブルのすべての内容を本テーブルにinsert、処理OKならcommitする  ・インポート中に問題がおきたら適切なエラー処理をして仮テーブルの全レコードを削除する なんていう方法もあろうかと思います。 ま、結構横道な手段ですが。

bakenshibakenshi
質問者

お礼

galluda様、ご教授有難う御座います。 おぉ~こういうやり方もあるんですね。 大変参考になります。

その他の回答 (2)

  • mooboogie
  • ベストアンサー率68% (28/41)
回答No.2

バルクインサートは、可能だと思いますので、 CSV 1,"aaa","kkk" 2,"bbb","jjj" 3,"ccc","lll" 上記をアプリケーションなどで編集して、 insert into table1 values (1,"aaa","kkk"), (2,"bbb","jjj"), (3,"ccc","lll"); というような文へ変換して実行すればご要望の状況が実現可能かと思います。 ただし、数千件を一回のInsert文に突っ込むことはできなかったと思います。 最大行数は何行かは知りません。 100行から200行程度ならOKだったと思います。

bakenshibakenshi
質問者

お礼

mooboogie様、ご教授有難う御座います。 データ量は膨大でファイル数も多いと考えております。 ですので、mooboogie様も危惧されているように 最大行数のエラーになるかもしれません。 何行くらいまでいけるか調べておかないといけないかもしれませんので いいヒントを頂きました。 どうも有難う御座いました。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 ごく単純に「まず複数のCSVファイルを一つにまとめてから処理をする」ではだめなのでしょうか? 直接的な回答ではなくて申し訳ないのですが。

bakenshibakenshi
質問者

お礼

galluda様、ご教授有難う御座います。 要件に詳しく書けばよかったのですが CSVファイルは多数あり、データ量も膨大と考えております。 少ないデータ量でしたら、galluda様の案も出来ますね。 参考になりました。 どうも有難う御座いました。

関連するQ&A