MySQLのCSVストレージエンジン


こんにちは、h_nagayamaです。
今回は、MySQLの「 CSVストレージエンジン 」を調べてみました。
このエンジンには下記の特徴があります
・データがカンマ区切りのテキストファイル(csv)で保存されます
・他のストレージエンジンと同じように、SQLを発行してデータを操作することも可能です
・テーブル構成に対する制約が多め(PRIMARY KEYやINDEXは使用できないなど)

①実際にテーブルを作ってみます
今回の検証環境は Windows XP / MySQL 5.5.16 です。
テーブルを作成する前に、SHOW ENGINESで使用するMySQLでCSVストレージエンジンが
サポートされていることを確認します。

mysql> SHOW ENGINES \g

idとtextだけのシンプルなテーブルを作成してみます。

CREATE TABLE `csv_test` (
`id` int NOT NULL,
`text` varchar(100) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8;

CREATE SQLで【 ENGINE=CSV 】を指定して下さい。

テーブル作成後、データディレクトリの直下に3種類のファイルが作成されます。 ※1
・【テーブル名】.csv → カンマ区切りのデータファイル
・【テーブル名】.csm → テーブル内の行数などを記憶するファイル(MySQL 5.1.9から)
・【テーブル名】.frm → テーブル構造を記録するファイル
※1
Windowsの場合は[my.iniに定義されているdatadirのパス]/ [データベース名] / の直下です

②操作してみます
・データの登録/更新/削除は、他のストレージエンジンと同じようにSQLを実行できます

mysql>
mysql> INSERT INTO csv_test VALUES (1,'data_1'),(2,'data_2');
Query OK, 2 rows affected (0.05 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM csv_test;
+----+--------+
| id | text   |
+----+--------+
|  1 | data_1 |
|  2 | data_2 |
+----+--------+
2 rows in set (0.02 sec)

この時の【テーブル名】.csv ファイルは下記です。

1,"data_1"
2,"data_2"

・【テーブル名】.csv ファイルを直接編集する
.csvファイルの内容を下記に書き換えます。3行目に新しいデータを追加してみました。
例: ファイルを直接編集

1,"new_data_1"
2,"new_data_2"
3,"add_data_3"

テーブルに反映させるためには、一度 FLUSH TABLES が必要です。

mysql> # 編集直後のselectでは追加したデータが反映されません
mysql> SELECT * FROM csv_test;
+----+------------+
| id | text       |
+----+------------+
|  1 | new_data_1 |
|  2 | new_data_2 |
+----+------------+
2 rows in set (0.02 sec)

mysql> # FLUSH TABLES を実行して結果を反映させます
mysql> FLUSH TABLES csv_test;
Query OK, 0 rows affected (0.02 sec)

mysql>
mysql> SELECT * FROM csv_test;
+----+------------+
| id | text       |
+----+------------+
|  1 | new_data_1 |
|  2 | new_data_2 |
|  3 | add_data_3 |
+----+------------+
3 rows in set (0.02 sec)

■まとめ
メリット
・SQLに馴染みのない人も、テキストエディタやExcelなどを使用してデータを編集/確認できる
・MySQLが停止していても、ファイルにアクセスすることができればデータを確認できる
デメリット
・大量のデータに対する検索には不向き?(INDEXを使用できないため) ※2
※2
ALTER TABLEで別のストレージエンジンに変更後、INDEXを付けることは可能です

Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*