MySQL データベースのテーブルに CSV ファイルをインポートする

Gustavo du Mortier 2023年1月30日
  1. MySQL に CSV をインポートするには、LOAD DATA INFILE SQL を実行する
  2. HeidiSQL を使って MySQL に CSV をインポートする
MySQL データベースのテーブルに CSV ファイルをインポートする

このチュートリアル記事では、カンマ区切り値(CSV)ファイルから MySQL データベースにデータをインポートしてテーブルに挿入する 2つの方法を紹介します。

CSV ファイルを MySQL にインポートするためのさまざまなアプローチを紹介します。このタスクは、一連の SQL コマンドを実行することでプログラム的に行うことができ、HeidiSQL のようなグラフィカルな MySQL クライアントのファイルインポートダイアログを使用することで対話的に行うことができます。

MySQL に CSV をインポートするには、LOAD DATA INFILE SQL を実行する

まず、LOAD DATA INFILE SQL 文を使って CSV ファイルをプログラムでインポートする方法を見てみましょう。

ファイルをインポートする前に、インポートしたデータを含むテーブルを作成する必要があります。CSV ファイルに ISBN、Title、Author、ListPrice フィールドに分割された書籍情報が含まれているとします。このようなテーブルを作成するには、次のようなコマンドを実行する必要があります。

CREATE TABLE BooksCSV (
    ISBN VARCHAR(255) NULL,
    title VARCHAR(255) NULL,
    author VARCHAR(255) NULL,
    ListPrice VARCHAR(255) NULL
);

CSV ファイルのデータが完全に正規化されているかどうかは事前にわからないので、すべてのフィールドは NULL 値を許容し、テーブルには主キーを持たないことをお勧めします。

もう一つの推奨事項は、ファイル内のデータが不適切にフォーマットされていることによる処理のエラーを防ぐために、数値データの場合でも VARCHAR フィールドのみを使用することです。データをインポートした後、テーブルの行を読み込んで必要な検証と修正を行い、データベース内で直接クリーンアップすることができます。

データの保存先テーブルが決まったら、CSV ファイルのパスを特定する必要があります。ファイルのフルパスが C:\csvdata\books.csv だとします。そのファイルをテーブルにインポートするには、以下のコマンドを実行する必要があります。

LOAD DATA
INFILE 'c:/csvdata/books.csv'
INTO TABLE BooksCSV ` 

LOAD DATA INFILE 文は、ソースファイルと宛先テーブルを指定する必要があります。オプションとして、フィールドの区切り文字、テキスト修飾子、ヘッダ行の存在などの他のパラメータを指定することもできます。

次の例では、追加されたパラメータは、フィールドをカンマで区切ること、文字列をダブルクォーテーションで囲むこと、および最初の行には列ヘッダが含まれているので無視することを指定しています。

LOAD DATA
INFILE 'c:/csvdata/books.csv'
INTO TABLE BooksCSV 
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
IGNORE 1 ROWS;

これで、MySQL で CSV ファイルをプログラム的にインポートする方法がわかりました。

HeidiSQL を使って MySQL に CSV をインポートする

HeidiSQL のようなグラフィカルな MySQL クライアントを使って対話的に行う方法を見てみましょう。

手順は上で見たのと同じです。

  • テーブルを作成する
  • その中に内容をインポートします。

HeidiSQL を使ってテーブルを作成するには、クライアントを MySQL サーバに接続し、データをインポートしたいデータベースを選択する必要があります。そして、データベース上で右ボタンをクリックし、Create New - Table オプションを選択します。

mysql のインポート csv のスクリーンショット 1

対応するフィールドにテーブル名を入力し、列を追加する必要があります。列を追加するには、+ ボタンをクリックして、その名前とデータ型を入力します。

この例では、テーブルは BooksCSV と呼ばれ、フィールドは前の例で使ったものと同じです。

カラムの追加が終わったら、Save をクリックしてデータベースにテーブルを作成します。

テーブルを作成したら、CSV ファイルからデータをインポートすることができます。ただし、インポート処理を開始する前に、クライアントとサーバの両方のコンポーネントの起動パラメータを変更して、ローカルデータの読み込みを有効にする必要があります。ローカルデータの読み込みを有効にする際に考慮しなければならないセキュリティ上の注意事項がいくつかあります。それらについての詳細は、MySQL の公式ドキュメントからこの記事を読んでください。

CSV ファイルをインポートする準備ができたら、HeidiSQL の[ツール]メニューに移動し、[CSV ファイルのインポート]オプションを選択します。インポートする CSV ファイルのパスを指定し、インポートしたデータを挿入するデータベースとテーブルを選択する必要があります。テーブルのフィールドがファイルにあるようにテーブル内にフィールドが多い場合は、テーブルフィールドのチェックを外すことができます。最後に、Import!をクリックすると、プロセスが開始されます。

mysql import csv のスクリーンショット 2

インポートを実行するために、グラフィカル・インターフェースは、以前にプログラム・オプションで説明したのと同じ LOAD DATA コマンドを発行するため、最終結果はほぼ同じです。データベーステーブルには CSV ファイルから読み取られたデータが入力されます。

LOAD DATA ステートメントの使用方法の詳細については、MySQL の公式ドキュメントのこの記事を参照してください。

関連記事 - MySQL Import