CSV存储引擎
在CSV
使用逗号分隔值格式的文本文件存储引擎存储数据。
该CSV
存储引擎总是被编译到MySQL服务器。
要检查CSV
引擎的源代码,请参见storage/csv
MySQL源代码分发目录。
创建CSV
表时,服务器将创建一个纯文本数据文件,该文件的名称以表名开头并具有.CSV
扩展名。当您将数据存储到表中时,存储引擎会将其以逗号分隔的值格式保存到数据文件中。
mysql>CREATE TABLE test (i INT NOT NULL, c CHAR(10) NOT NULL)ENGINE = CSV; Query OK, 0 rows affected (0.06 sec) mysql>INSERT INTO testVALUES (1,'record one'),(2,'record two'); Query OK, 2 rows affected (0.05 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或StarSuite Calc)读取甚至编写这种格式。
修复和检查CSV表
该CSV
存储引擎支持CHECK TABLE
和REPAIR TABLE
语句来验证,如果可能,修复损坏的CSV
表。
运行该CHECK TABLE
语句时,CSV
将通过查找正确的字段分隔符,转义的字段(匹配或缺少引号),与表定义进行比较的正确字段数以及是否存在相应的CSV
图元文件来检查文件的有效性。发现的第一个无效行将报告错误。检查有效表将产生如下所示的输出:
mysql>CHECK TABLE csvtest; +-------------- +------- +---------- +---------- + | Table | Op | Msg_type | Msg_text | +-------------- +------- +---------- +---------- + | test.csvtest | check | status | OK | +-------------- +------- +---------- +---------- +
检查损坏的表将返回错误:
mysql>CHECK TABLE csvtest; +-------------- +------- +---------- +---------- + | Table | Op | Msg_type | Msg_text | +-------------- +------- +---------- +---------- + | test.csvtest | check | error | Corrupt | +-------------- +------- +---------- +---------- +
如果检查失败,该表将标记为已崩溃(损坏)。将表标记为损坏后,将在下次运行CHECK TABLE
或执行SELECT
语句时自动对其进行修复。运行时将显示相应的损坏状态和新状态CHECK TABLE
:
mysql>CHECK TABLE csvtest; +-------------- +------- +---------- +---------------------------- + | Table | Op | Msg_type | Msg_text | +-------------- +------- +---------- +---------------------------- + | test.csvtest | check | warning | Table is marked as crashed | | test.csvtest | check | status | OK | +-------------- +------- +---------- +---------------------------- +
要修复表,请使用REPAIR TABLE
,该表会从现有CSV
数据中复制尽可能多的有效行,然后用CSV
恢复的行替换现有文件。超出损坏数据的所有行都将丢失。
mysql>警告REPAIR TABLE csvtest; +-------------- +-------- +---------- +---------- + | Table | Op | Msg_type | Msg_text | +-------------- +-------- +---------- +---------- + | test.csvtest | repair | status | OK | +-------------- +-------- +---------- +---------- +
修复期间,仅将CSV
文件中直到第一行损坏的行复制到新表中。从第一行损坏到表末尾的所有其他行都被删除,即使是有效的行也是如此。
CSV限制
该CSV
存储引擎不支持索引。
该CSV
存储引擎不支持分区。
使用CSV
存储引擎创建的所有表必须NOT NULL
在所有列上具有该属性。