首先我们来看CSV这种存储引擎,CSV存储引擎呢,可以讲CSV文件,作为MYSQL的表来处理,这种存储引擎的存储格式呢,
就是普通的CSV文件,CSV存储引擎的数据存储方式非常的有特点,如果我们把数据存储在MYISAM和Innodb表中的话,
其数据文件我们是不能够直接查看的,因为这两种数据文件的存储呢,都是以二进制文件方式来存储的,而CSV存储引擎呢,
则不同,CSV存储引擎是以文件方式来进行存储的,也就是说,我们可以通过查看文件的命令,比如more,或者是vim工具,
直接查看或者编辑CSV存储引擎中的表,只要符合CSV文件的格式,我们就不要担心损坏数据,当我们在MYSQL中建立一张
CSV存储引擎的表时呢,我们应该可以看到,三个系统文件中的文件,这三个文件都是以表名为文件名,但是分别会以CSV
CSM和FRM为后缀,其中呢CSV文件呢,就是CSV存储引擎的文件,刚才说了,这个文件的存储呢,是以文本格式来进行存储的,
另一个CSM文件呢,这个是存储引擎从存储的元数据存储的文件,其中主要是包括了表的状态,和数据行和数量的信息,
最后就是frm文件了,这个文件前面也已经多次介绍过,是MYSQL服务器层,存储元数据所需要的文件,会存在所有的存储
引擎中,下面我们再来看一下CSV存储引擎有哪些特点,然后在一起给大家演示一下,如何遍历CSV存储引擎的表
CSV存储引擎有哪些特点呢,前面说到了,CSV存储引擎,其最大的特点就是将CSV文件,作为MYSQL的表来处理,
这种存储引擎的存储格式呢,就是普通的CSV格式,大家对CSV的格式已经比较熟悉了,CSV文件中的每一列呢,
都是以逗号来分割的,并且对于文本数据的类型来说呢,以双引号来引起来的,如咱们右边图的内容呢,就是很
典型的CSV的格式了,CSV存储的第二个特点呢,是建立表时呢,所有列的定义都必须是非空的,也就是说,CSV存储引擎的
表是不允许出现可为空的列的,可以在下面的演示中进行验证,和MYISAM和Innodb存储引擎的不同,CSV存储引擎呢,不支持
索引的,大家知道,索引的主要作用呢,可以优化查询的效率,如果一个表不支持索引,那么每次查询时呢,进行全表扫描,
那么对于一个大表来说呢,显然这个查询效率会比较低,所以这一点来看,CSV存储引擎呢,并不适用于OLTP环境中的使用,
也就是在线处理,像我们的web环境是不适合使用CSV存储引擎的,最后呢,CSV存储引擎是支持对文件进行编辑的,这和其他
大多数数据存储引擎是不同的,其他存储引擎的文件呢,是以二进制文件进行存储的,而CSV存储引擎的文件呢,都是保持文本
文件的内容,说了这么多,可能大家并不能很好的理解,CSV存储引擎的特点,所以我们需要在MYSQL环境中给大家来演示一下,
CSV存储引擎的使用
试一下CSV存储引擎的使用,首先我们在test库中呢,建立一张CSV引擎的表,同样这张表就命名为CSV,
首先第一列是id,c1列,varchar(10),和c2列,它是char(10)的列,同时我们指定存储引擎是CSV,大家可以看一下,
如果细心一定会发现,我们这三个列都是可以允许为空的,那么我们看一下在这种情况下呢,会出现什么问题,大家
看到这里爆出一个1178的错误,这个存储引擎不支持为空的列的,也就是之前给大家介绍的CSV存储引擎特点的时候,
特别指出的
CSV存储引擎是不支持为空的列的,大家可以在这里看到,那么下面我们对这个表定义进行一个修改,使他进行not null约束,
再进行定义,看会怎么样,每一列中都不能为空,再次进行SQL我们就发现,成功建立了mycsv表
create table mycsv(id int not null,c1 varchar(10) not null, c2 char(10) not null) engine=csv;
现在我们可以随意的往表中插入一些数据,我们随便插入几列吧,假如我们先插入这两列
insert into mycsv values(1,'aaa','bbb'),(2,'ccc','ddd');
分别是id为1和2的两列
首先我们到test库下
ls -lh mycsv*
他区分大小写,我们看到三个文件系统的文件,分别是mycsv.CSM文件,和mycsv.CSV文件,frm文件,
这三个文件就是我们之前学习存储引擎存储特点时呢,就给大家提供了三个文件
大家可以来看一看,首先csv文件就是所说的数据文件,csm就是使用元数据存储的一些文件,frm是MYSQL系统的一些约束文件,
那么下面继续我们的测试,我们来看看mycsv文件的内容,我们说过,我们是以文本文件的格式来存储的
more mycsv.CSV
大家看到了,其实其中存储的格式呢就是,文本文件,他存储的内容呢,在表中插入的内容是完全一样的
他的数据存储文件是可以进行编辑的,对他进行一些编辑,加上'eee','fff',我们按照上面的方法来写,
这一点大家要注意,要用双引号,而不用单引号
我们在以命令行格式下呢,加了一列,id为3的列,我们看看我们在MYSQL下是否可以看到,首先我们要把表进行刷新操作,
才能重新读取一张表,大家可以看到,同样在我们的MYSQL系统下呢,同样看到了我们文件命令行中插入的第三个列,他可以
对我们存储的文件进行编辑,前面才说过CSV存储引擎是不支持索引的,那我们在CSV建立索引会有怎样的影响呢
我们来试一下,我们在id列上建立一个索引,看看他会给我们什么样的提示,这个提示是没有问题的,语句有些问题,
大家看到,被提示,有太多的关键字未指定,0个关键字,也就是不支持索引了
create index idx_id on mycsv(id);
只允许0个关键字,0个关键字也就是不支持索引了,以上我们就会CSV引起进行一个完整的演示,包括他的一些特性,
那么下面我们再来看一看,他的适用场景,根据我们之前的介绍和演示呢,我们可以知道,CSV存储引起可以在拷贝,
拷出文件的数据文件,可以将excel数据表格,文件中的数据呢存储为CSV文件,然后复制到MYSQL数据目录下,就能够
在MYSQL进行打开和使用,同样如果将数据写入到CSV文件的表中呢
同样如果将数据写入到CSV引擎的表中呢,其他的web程序呢,也能够立即的从表中,读取到CSV表中的数据,
因此CSV存储引擎,可以作为一个数据交换中间表,来进行使用,这一点是非常有用的