MySQL 学习篇(二)MySQL常用存储引擎——CSV

目录

MySQL常用存储引擎之CSV

文件系统的存储特点

CSV存储引擎特点

MySQL环境演示CSV存储引擎的使用

CSV适用场景

 


  • MySQL常用存储引擎之CSV

CSV存储引擎可以将CSV文件作为MySQL表来处理,这种存储引擎的存储格式的就是普通的CSV文件,CSV存储引擎的数据存储方式非常的有特点。

  • 文件系统的存储特点

如果我们把数据存储在MyISAM,或者说InnoDB表中的话,其数据文件我们是不能直接查看的,因为这两种存储引擎的数据存储都是以二进制文件方式来存储的。

而CSV存储引擎则不同,CSV存储引擎的数据格式是以文件方式来进行存储的,也就是说我们可以通过,查看文件的命令more或者vi 工具,直接查看或编辑CSV存储引擎中的表,只要符合CSV文件的格式要求,我们就不用担心损坏数据。

问:当我们在MySQL中建立了一个CSV存储引擎的表时,我们应该可以看到什么?

答:三个文件系统的文件,这三个文件都是以表名为文件名,但是会分别以CSV、CSM和FRM为后缀,启动了CSV文件:

  1. CSV文件就是CSV存储引擎中的数据文件【文本格式来进行数据存储的】
  2. CSM文件是存储引擎层存储元数据所使用的文件【主要包括了表的状态和数据行的数量的一些信息】
  3. FRM文件是Mysql服务器层存储元数据所使用的文件【会存在于所有的存储引擎中】
  • CSV存储引擎特点

MySQL 学习篇(二)MySQL常用存储引擎——CSV_第1张图片

1、最大的特点就是将CSV文件,作为MySQL的表来处理,这种存储的存储格式的就是普通的CSV的文件格式,大家对CSV文件的格式,应该比较熟悉了,这CSV文件的每一列都是以“,”分割的,并且对于文本类型的数据来说,是以双隐号来引起来的。

下图中的内容就是一个很典型的CSV文件的格式了:

2、CSV的第二个特点,是在建立表时所有的列的定义必须都是非空的,也就是说CSV存储引擎的表是不允许出现可为空的列的。

问:CSV和MyISAM、InnoDB存储引擎有什么不同?

答:CSV存储引擎的是不支持索引的,索引的主要作用就是优化查询的效率,如果一个表不支持,所以那么每次查询时的都会进行全表扫描,那么对于一个大表来说,这显然这个查询效率会非常低,所以呢这一点来看,CSV存储引擎并不适用于OLTP环境中的使用,也就是在线处理,像我们一般的web环境是不适合使用CSV存储引擎的

3、CSV存储引擎是支持对文件系统的数据文件直接进行编辑,这和其他大多数数据库存储引擎的是不同的,其他存储引擎的数据文件的全是以二进制来进行存储的,而CSV存储引擎的数据文件中保存的却是文本文件的内容。

  • MySQL环境演示CSV存储引擎的使用

1、在test库中建立CSV存储引擎的表(mycsv)

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> create table  mycsv(id  int,c1 varchar(10),c2 char(20)) engine=csv;
ERROR 1178 (42000): The storage engine for the table doesn't support nullable columns
mysql> 

场景问题1:在这个表中的我们这三个列都是程序允许为空的,在这种情况下会出现什么问题?

答:报出1178错误,也就是说这个存储引擎是不支持可为空的列的,这也就是我们之前给大家介绍了这个CSV存储引擎特点的时候特别指出的。

2、修改表定义增加表约束

# 修改表 not null
mysql> create table  mycsv(id  int not null,c1 varchar(10) not null,c2 char(20) not null) engine=csv;
Query OK, 0 rows affected (0.04 sec)

# 查看表结构
mysql> show create table mycsv;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                              |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
| mycsv | CREATE TABLE `mycsv` (
  `id` int(11) NOT NULL,
  `c1` varchar(10) NOT NULL,
  `c2` char(20) NOT NULL
) ENGINE=CSV DEFAULT CHARSET=latin1 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> 

3、向表插入一些数据查看到存储特性

# 插入数据
mysql> insert into mycsv values(1,'xuhaiyan','ww'),(2,'dengc','dc');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

# 查询数据
mysql> select * from mycsv;
+----+----------+----+
| id | c1       | c2 |
+----+----------+----+
|  1 | xuhaiyan | ww |
|  2 | dengc    | dc |
+----+----------+----+
2 rows in set (0.00 sec)

 

4、到我们的文件系统中查看文件系统存储特点

# 查询数据存储路径
mysql> show global variables like "%datadir%";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)


# 另开一台,进入存储路径查询具体数据文件
[root@localhost test]# cd  /var/lib/mysql/test


# 删选只浏览mycsv.*文件
[root@localhost test]# ls -lh mycsv.*
-rw-rw----. 1 mysql mysql   35 2月  20 10:00 mycsv.CSM
-rw-rw----. 1 mysql mysql   33 2月  20 10:00 mycsv.CSV
-rw-rw----. 1 mysql mysql 8.5K 2月  20 09:56 mycsv.frm

 

5、查看CSV文件的内容【是以文本格式来进行存储】

# 查看以文本格式存储的mycsv.*文件内容
[root@localhost test]# more mycsv.CSV
1,"xuhaiyan","ww"
2,"dengc","dc"

跟我们看在表中插入内容是一样的,我们刚才还说我这个CSV文件的特点,他的这个数据存储文件可以直接进行编辑的。

6、对CSV数据文件进行编辑【注意单双引号严格要求】

[root@localhost test]# vi mycsv.CSV

1,"xuhaiyan","ww"
2,"dengc","dc"
3,"XX","NEW ADD"
~                                                                                                                                                                                              
~                                                                                                                                                                                              
~                                                                                                                                                                                              
~ 
:wq

在命令行的格式下增加了ID为3的列

7、在Mysql下在SQL语句查询是否有上述结果

  • 刷新操作【重新读取表】
    mysql> flush tables;
    
  • 执行SQL
# 查询
mysql> select * from mycsv;
+----+----------+---------+
| id | c1       | c2      |
+----+----------+---------+
|  1 | xuhaiyan | ww      |
|  2 | dengc    | dc      |
|  3 | XX       | NEW ADD |
+----+----------+---------+
3 rows in set (0.00 sec)

总结:

上述演示了CSV它可以直接对我们的数据,存储的文件进行编辑,前面的还说过CSV文件存储引擎的是不支持索引的。

问:CSV不支持索引,那么我们在CSV表上建立索引会怎么样呢?

答:

mysql> mysql> create index idx_id on mycsv(id);
ERROR 1069 (42000): Too many keys specified; max 0 keys allowed
mysql> 

 

太多的关键字被指定,仅支持0个关键键,这意味着不支持索引了

  • CSV适用场景

根据我们之前,前面的介绍和演示了,我们可以知道,CSV存储引擎可以在数据库运行时,拷贝或者是拷出文件,存储数据的文件,可以将excel电子表格软件中的数据的存储为CSV文件,然后复制到MySQL数据目录下,就能够在MySQL中打开和使用了,如下图所示:

同样的,如果将数据写入到CSV引擎的表中的其他的外部程序呢,也能够立即的从表中数据文件中读取的CSV格式的数据,又是CSV存储引擎,可以作为数据交换空间表来进行使用,这一点都是非常有用的,如下图所示:

MySQL 学习篇(二)MySQL常用存储引擎——CSV_第2张图片

你可能感兴趣的:(Mysql)