• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • CSV存储引擎

    CSV使用逗号分隔值格式的文本文件存储引擎存储数据。

    CSV存储引擎总是被编译到MySQL服务器。

    要检查CSV引擎的源代码,请参见storage/csvMySQL源代码分发目录。

    创建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 test VALUES(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 TABLEREPAIR 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在所有列上具有该属性。