CSV→SQL変換(INSERT文生成)

CSVファイルをSQLのINSERT文・CREATE TABLE文に変換します。MySQL・PostgreSQL・SQLiteの3方言に対応し、列の型(整数・小数・文字列)を自動判定します。変換処理はブラウザ内で完結し、データはサーバーに送信されません。


区切り文字
先頭行を見出しとする
テーブル名
SQL方言
CREATE TABLE文も生成する
空欄の値をNULLとして扱う
複数行をまとめた1つのINSERT文にする


            
            コピーしました!
            
          

CSVを入力すると、ここにSQL文が表示されます。

CSVの行とINSERT文の対応

CSVの1行 name,age,city
変換後のINSERT文 INSERT INTO `my_table` (`name`, `age`, `city`) VALUES ('Alice', 30, 'Tokyo');

先頭行を見出しとして使う場合、2行目以降の各行が、見出しの列名を指定した1つのINSERT文に変換されます。整数・小数として認識された列は引用符なしの数値として、それ以外はシングルクォートで囲んだ文字列として出力されます。

Tips

  • 列の型(整数・小数・文字列)は、その列に含まれる全データ行の値を調べて自動判定されます。1件でも数値以外の値があればその列全体が文字列型として扱われます。
  • 「複数行をまとめた1つのINSERT文にする」を有効にすると、`INSERT INTO ... VALUES (...), (...), (...);` という1文にまとまり、大量データを投入する際の実行回数を減らせます。
  • MySQLはバッククォート(`)、PostgreSQL・SQLiteはダブルクォート(")でテーブル名・列名を囲むため、SQL方言の選択でクォート文字が自動的に切り替わります。
  • 「空欄の値をNULLとして扱う」を無効にすると、空文字列は文字列型の列では空の文字列リテラル('')として、数値型の列ではNULLとして出力されます。

よくある質問

その列に含まれるすべてのデータ行の値を調べ、全て整数表記であればINTEGER型、全て小数表記であればREAL型、それ以外(文字列や混在)であればTEXT型と自動判定します。CREATE TABLE文を生成する場合、この判定結果がそのまま列の型として出力されます。

はい。「SQL方言」でPostgreSQLまたはSQLiteを選択すると、テーブル名・列名のクォート文字(ダブルクォート)や型名がそれぞれのデータベースに準拠した形式で出力されます。

SQL標準のエスケープ方式に従い、シングルクォートは自動的に2つ重ねた表記('')に変換されるため、そのままSQL文として実行できます。

いいえ。変換処理はすべてブラウザ内のJavaScriptで行われ、入力したCSVの内容がサーバーに送信されることはありません。実データを含むCSVでも安心してご利用いただけます。
ツールくん

余談ですが ― INSERT文が「遅い」と言われる理由

本ツールで生成できる「複数行をまとめた1つのINSERT文」(`INSERT INTO t VALUES (1,'a'), (2,'b'), ...;`)は、1行ごとに個別のINSERT文を発行する場合に比べて実行が大幅に速くなることがあります。これは、データベースがSQL文を解析・実行計画に変換するオーバーヘッドや、トランザクションのコミット処理が文の数だけ繰り返されるコストを、まとめることで削減できるためです。

ただしMySQLには `max_allowed_packet`、PostgreSQLには類似の通信バッファ上限があり、あまりに大量の行を1つのINSERT文に詰め込むと、その上限を超えてエラーになることがあります。実務では数百〜数千行程度ごとに文を分割するのが一般的な運用です。

CSVファイルをテスト用データベースに投入する作業は、開発現場では「シードデータの準備」と呼ばれることが多く、Webフレームワークの多くが専用の仕組み(Laravelのseeder・factoryなど)を用意しているほど頻出のタスクです。本ツールのような変換ツールは、そうした仕組みを使うまでもない小規模な検証やデータ移行の際に手早く使える手段として重宝されます。