FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

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

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

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

idとtextだけのシンプルなテーブルを作成してみます。 [sql] CREATE TABLE `csv_test` ( `id` int NOT NULL, `text` varchar(100) NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8; [/sql] CREATE SQLで【 ENGINE=CSV 】を指定して下さい。

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

②操作してみます ・データの登録/更新/削除は、他のストレージエンジンと同じようにSQLを実行できます [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) [/sql]

この時の【テーブル名】.csv ファイルは下記です。 [sql] 1,"data_1" 2,"data_2" [/sql]

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

テーブルに反映させるためには、一度 FLUSH TABLES が必要です。 [sql] 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]

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