Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb

15.4 CSV ストレージエンジン

CSV ストレージエンジンは、カンマ区切り値形式を使用してデータをテキストファイルに保存します。

CSV ストレージエンジンは、常に MySQL サーバーにコンパイルされます。

CSV エンジンのソースを調べるには、MySQL ソース配布の storage/csv ディレクトリを検索します。

CSV テーブルを作成するときに、サーバーはデータベースディレクトリにテーブル形式ファイルを作成します。ファイルはテーブル名から始まり .frm 拡張子が付きます。ストレージエンジンはデータファイルも作成します。その名前はテーブル名で始まり .CSV 拡張子を持ちます。データファイルはプレーンテキストファイルです。データをテーブルに保存するとき、ストレージエンジンはデータファイルにカンマ区切り値形式で保存します。

    -> ENGINE = CSV;
Query OK, 0 rows affected (0.12 sec)

mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM test;
| i    | c          |
|    1 | record one |
|    2 | record two |
2 rows in set (0.00 sec)

CSV テーブルを作成すると、テーブルの状態とテーブルに存在する行数を格納する、対応するメタファイルが作成されます。このファイルの名前は CSM 拡張子のついたテーブル名と同じです。

前のステートメントの実行で作成されたデータベースディレクトリにある test.CSV ファイルを調べると、その内容は次のようであるはずです。

"1","record one"
"2","record two"

この形式は、Microsoft Excel や StarOffice Calc などのスプレッドシートアプリケーションで読み取ったり書き込んだりできます。

User Comments
  Posted by Neil Davis on June 17, 2006
Using the windows version of mysql 5.1.11 beta:

CSV rows need to be terminated with a unix newline.

If you load a csv data into a csv table by replacing a blank csv table file, with a file already loaded with data, as described in csv overview, replacing new table with one already populated with data, and the data originates from a windows box, you need to first replace the \r\n with \n (windows linefeed/carriage return with a unix newline) or the table will not be loaded properly.

You will get a message about a crashed table when you attempt to access it.

Open file in a program like PFE 32 that can "Save As" replacing the crlf with unix newlines and mysql will then be able to access table normally.
  Posted by Ben Clewett on August 24, 2011
On UNIX is it also possible to use a symbolic link to point to any file on the system.

Delete the .CSV file, then symbolically link to your own file as the name you have deleted.


# rm passwd.CSV
# ln -s /etc/passwd passwd.CSV

You get the idea...

  Posted by Chris Wagner on October 22, 2011
The CSV engine is great for easily bringing a spreadsheet into a REAL DATABASE for analysis, manipulation, and extraction.

CREATE TABLE memfromcsv SELECT * FROM csvtable;

Now u can create indexes to do the analysis. And, create another CSV table and select into it. Then it can be pulled out and loaded right into Excel. Do FLUSH TABLES to make sure it's clean first. This is only one scenario, there are countless possibilities.

It's also an easy way to get a CSV file out of a table.

CREATE TABLE csvtable SELECT * FROM innodbtable;

  Posted by Marcin Szalowicz on March 2, 2013
There is missing info that when manually changing .csv file in the mysql datadir, you should issue: FLUSH TABLE csv_table; so mysql will reload it contents.
FLUSH TABLE csv_table; is not required when you're replacing the file i.e.delete/create from scratch.
  Posted by Mathias Brem Garcia on July 23, 2014
Yeah Clewett!

I make this! On my case, i needed read MySQL Error log in database, because i needed make a plugin for check errors on MySQL Error Log, but my plugins access database and don't accessed file system. So, i make this:

mysql> create table mysql.error_log(msg text not null) engine=CSV;

shell> rm -f /var/lib/mysql/mysql/error_log.CSV
shell> ln -s /var/log/mysqld.log /var/lib/mysql/mysql/error_log.CSV

So, now i read the MySQL Error Log with querys, look this:

mysql> select count(*) as ERROR from mysql.error_log where msg like '%erro%';

If the query return ERROR more then 1, alert CRITICAL.

It's an idea for another cases or to monitoring like my case


Sign Up Login You must be logged in to post a comment.