MySQL サーバー上の CSV エンジン

MySQL サーバー上の CSV エンジン

これはプログラミングに関する質問ではないと思うので、ここで質問します。

高性能 MySQL という本を読んでいて、CSV エンジンについて読みました。その段落には次のように書かれています。

CSV エンジンは、カンマ区切り値 (CSV) ファイルをテーブルとして扱うことができますが、それらのインデックスはサポートしていません。このエンジンを使用すると、サーバーの実行中にデータベースにファイルをコピーしたり、データベースからファイルをコピーしたりできます。スプレッドシートから CSV ファイルをエクスポートして、MySQL サーバーのデータ ディレクトリに保存すると、サーバーはすぐにそれを読み取ることができます。同様に、CSV テーブルにデータを書き込むと、外部プログラムはすぐにそれを読み取ることができます。CSV テーブルは、データ交換形式として、また特定の種類のログ記録に特に役立ちます。

この段落から私が得たのは、.CSV ファイルをデータベースのデータ ディレクトリにコピーすると、読み取り可能なテーブルとして表示されるはずだということです。ただし、テストの .csv ファイルをディレクトリにコピーすると、テーブルとして表示されません。アクセスできません。

私もMySQL 5.5を使用しています

なぜこれが機能しないのか、または私が何を間違っているのか知っている人はいますか?

答え1

問題が何なのかを調べるために、MySQL サーバーでこれを試してみることにしました。どうやら、テーブルが適切に MySQL に追加され、テーブル フィールドのメタデータが追跡されるようにするには、MySQL でテーブルを作成する必要があるようです (engine=csv を指定)。私のテストでは、最初に「create table」を使用しないと、MySQL に csv ファイルを認識させることができませんでした。

例:

  1. この例では、整数用に「i」という名前の列と文字フィールド用に「c」という名前の列を含む、foo という名前の新しい csv を作成します。 CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
  2. foo.frm、foo.CSM、foo.CSV は /var/lib/mysql/data/dbname に作成されます。foo.CSV はゼロバイトであることがわかります。
  3. 既存の csv (テーブルに定義された形式に一致するもの) を foo.CSV にコピーします。

    1,"FOOBAR"
    2,"FOOBAZ"
    3,"BARBAZ"
    
  4. mysql では、select * from foo は次の結果を生成します。

    mysql> select * from foo;
    +---+--------+
    | i | c      |
    +---+--------+
    | 1 | FOOBAR |
    | 2 | FOOBAZ |
    | 3 | BARBAZ |
    +---+--------+
    3 rows in set (0.00 sec)
    

関連情報