前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL之CSV存储引擎的应用

MySQL之CSV存储引擎的应用

作者头像
SEian.G
发布2021-12-01 16:45:00
1.2K0
发布2021-12-01 16:45:00
举报
文章被收录于专栏:SEian.G学习记录

今天来分享一下MySQL中支持的一种存储引擎--CSV,这种存储引擎平时工作中用得可能并不多,但是在某一些导入CSV文件的场景下,非常有用;平时我们把CSV文件导入到MySQL中,可能会考虑到使用load data的方式导入数据,下面我们介绍一种新的方式–使用CSV引擎,在CSV数据量比较大的情况下,比较好用;

CVS引擎MySQL默认就是支持的,可以通过如下的方式进行查看:

代码语言:javascript
复制
mysql>show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| ROCKSDB            | YES     | RocksDB storage engine                                                     | YES          | YES  | YES        |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)

MySQL CSV存储引擎可以将csv文件作为mysql的表进行处理。存储格式就是普通的csv文件。

文件系统存储特点

数据以文本方式存储在文件中(Innodb则是二进制)

.CSV文件存储表内容 .CSM文件存储表的元数据如表状态和数据量 .frm文件存储表结构信息

如果是8.0版本,没有.frm文件,而是.sdi文件

CSV引擎限制

  • 以CSV格式进行数据存储(逗号隔开,引号)
  • 所有的列必须都是不能为NULL的
  • 不支持索引(不适合大表,不适合在线处理)
  • CSV存储引擎不支持分区。
  • 可以对数据文件直接编辑(保存文本文件内容)

测试案例

我们新建一个csv文件,但是不指定not null

代码语言:javascript
复制
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

我们指定各列不为空

代码语言:javascript
复制
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.02 sec)

向表中插入数据

代码语言:javascript
复制
mysql> insert into mycsv values ( 1,'aaa','bbb'),(2,'ccc','ddd') ;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from  mycsv;
+----+-----+-----+
| id | c1  | c2  |
+----+-----+-----+
|  1 | aaa | bbb |
|  2 | ccc | ddd |
+----+-----+-----+
2 rows in set (0.01 sec)

我们查看文件系统下的文件

代码语言:javascript
复制
-rw-r----- 1 mysql mysql       3110 Nov 19 16:56 mycsv_750.sdi
-rw-r----- 1 mysql mysql         35 Nov 19 16:56 mycsv.CSM
-rw-r----- 1 mysql mysql         28 Nov 19 16:56 mycsv.CSV

查看CSV文件

代码语言:javascript
复制
# cat mycsv.CSV
1,"aaa","bbb"
2,"ccc","ddd"

我们发现就是文本文件

我们对文本文件进行编辑

代码语言:javascript
复制
1,"aaa","bbb"
2,"ccc","ddd"
3,"222","ddd"
4,"111","ddd"

然后在数据库中查看表

首先刷新数据表

代码语言:javascript
复制
mysql> flush tables;
Query OK, 0 rows affected (0.05 sec)

查看数据表

代码语言:javascript
复制
mysql> select * from  mycsv;
+----+-----+-----+
| id | c1  | c2  |
+----+-----+-----+
|  1 | aaa | bbb |
|  2 | ccc | ddd |
|  3 | eee | fff |
+----+-----+-----+
3 rows in set (0.00 sec)

我们发现在文件中修改的数据已经添加到了数据库

我们看看如果增加索引会发生什么

代码语言:javascript
复制
mysql> create index idx_id on mycsv(id);
ERROR 1069 (42000): Too many keys specified; max 0 keys allowed

证明不支持索引

好了,今天就先介绍这些;

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA的辛酸事儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件系统存储特点
  • CSV引擎限制
  • 测试案例
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档