为了管理方便,人们把连接管理、查询缓存,语法解析,查询优化这些并不涉及真实数据存储的功划分为MySQL server的功能,把真实存取数据的功能划分为存储引擎的功能。所以在MySQL Server完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就好了
MySQL中提到了存储引擎的概念。简而言之,存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来
改名为存储引擎,它的功能就是接收上层传下的指令,然后对表中的数据进行提取或写入操作。
- mysql> show engines \G;
- *************************** 1. row ***************************
- Engine: FEDERATED
- Support: NO
- Comment: Federated MySQL storage engine
- Transactions: NULL
- XA: NULL
- Savepoints: NULL
- *************************** 2. row ***************************
- Engine: MEMORY
- Support: YES
- Comment: Hash based, stored in memory, useful for temporary tables
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 3. row ***************************
- Engine: InnoDB
- Support: DEFAULT
- Comment: Supports transactions, row-level locking, and foreign keys
- Transactions: YES
- XA: YES
- Savepoints: YES
- *************************** 4. row ***************************
- Engine: PERFORMANCE_SCHEMA
- Support: YES
- Comment: Performance Schema
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 5. row ***************************
- Engine: MyISAM
- Support: YES
- Comment: MyISAM storage engine
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 6. row ***************************
- Engine: MRG_MYISAM
- Support: YES
- Comment: Collection of identical MyISAM tables
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 7. row ***************************
- Engine: BLACKHOLE
- Support: YES
- Comment: /dev/null storage engine (anything you write to it disappears)
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 8. row ***************************
- Engine: CSV
- Support: YES
- Comment: CSV storage engine
- Transactions: NO
- XA: NO
- Savepoints: NO
- *************************** 9. row ***************************
- Engine: ARCHIVE
- Support: YES
- Comment: Archive storage engine
- Transactions: NO
- XA: NO
- Savepoints: NO
- 9 rows in set (0.00 sec)
-
- ERROR:
- No query specified
-
- show variables like '%storage_engine%';
- #或
- SELECT @@default_storage_engine;
-
- default-storage-engine=MyISAM
- # 重启服务
- systemctl restart mysqld.service
-
存储引擎是负责对表中的数据进行提取和写入工作的,我们可以为 不同的表设置不同的存储引擎 ,也就是说不同的表可以有不同的物理存储结构,不同的提取和写入方式。
我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎 InnoDB 。如果我们想显式的指定一下表的存储引擎,那可以这么写:
- CREATE TABLE 表名(
- 建表语句;
- ) ENGINE = 存储引擎名称;
-
如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名称;
比如我们修改一下 engine_demo_table 表的存储引擎:
这时我们再查看一下 engine_demo_table 的表结构:
创建CSV表时,服务器会创建一个纯文本数据文件,其名称以表名开头并带有.CSV扩展名。当你将数据存储到表中时,存储引将其以逗号分隔值格式保存到数据文件中。
使用案例如下
- mysql> SELECT * FROM test;
- +---+------------+
- | i | c |
- +---+------------+
- | 1 | record one |
- | 2 | record two |
- +---+------------+
- 2 rows in set (0.00 sec)
-
创建CSV表还会创建相应的 元文件 ,用于 存储表的状态 和 表中存在的行数 。此文件的名称与表的名称相
同,后缀为 CSM 。如图所示
如果检查 test.CSV 通过执行上述语句创建的数据库目录中的文件,其内容使用Notepad++打开如下:
这种格式可以被 Microsoft Excel 等电子表格应用程序读取,甚至写入。使用Microsoft Excel打开如图所示
概述:
Memory采用的逻辑介质是内存 , 响应速度很快,但是当mysqld守护进程崩溃的时候数据会丢失。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。
主要特征:
使用Memory存储引擎的场景:
也叫做 NDB Cluster 存储引擎,主要用于MySQL Cluster 分布式集群环境,类似于 Oracle 的 RAC 集群。
MySQL中同一个数据库,不同的表可以选择不同的存储引擎。如下表对常用存储引擎做出了对比
其实这些东西大家没必要立即就给记住,列出来的目的就是想让大家明白不同的存储引擎支持不同的功能。
其实我们最常用的就是InnoDB 和 MyISAM,有时会提一下Memory。其中 InnoDB 是 MySQL 默认的存
储引擎
很多人对 InnoDB 和 MyISAM 的取舍存在疑问,到底选择哪个比较好呢?
MySQL5.5之前的默认存储引擎是MyISAM,5.5之后改为了InnoDB。
1、InnoDB表的优势
2、InnoDB和ACID模型
ACID模型是一系列数据库设计规则,这些规则着重强调可靠性,而可靠性对于商业数据和任务关键型应用非常重要。MySQL包含类似InnoDB存储引擎的组件,与ACID模型紧密相连,这样出现意外时,数据不会崩溃,结果不会失真。如果依赖ACID模型,可以不使用一致性检查和崩溃恢复机制。如果拥有额外的软件保护,极可靠的硬件或者应用可以容忍一小部分的数据丢失和不一致,可以将MySQL设置调整为只依赖部分ACID特性,以达到更高的性能。下面讲解InnoDB存储引擎与ACID模型相同作用的四个方面。
3、InnoDB架构