为了管理方便,通常把连接管理、查询缓存、语法解析、查询优化这些并不设计真实数据存储的功能划分为MySQL Server 的功能,把真实存储数据的功能划分为存储引擎的功能。所以在MySQL Server完成查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就可以了。
简而言之,存储引擎就是指表的类型(如InnoDB和MyISAM在文件系统的文件存储方式不一样)。
其实存储引擎以前叫做表处理器,后来改名为存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或读写操作。
1、存储引擎相关操作
1.1 查看存储引擎
# 查看存储引擎mysql> show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine | Support | Comment | Transactions | XA | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL || MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO || InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES || PERFORMANCE_SCHEMA | YES | Performance Schema | 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 |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set (0.00 sec)mysql>
Transactions:表示存储引擎是否支持事务 YES表示支持,NO表示不支持
XA:表示存储引擎所支持的分布式是否符合XA规范。即存储引擎是否支持分布式事务。
Savepoints:表示存储引擎是否支持事务处理的保存点,即该存储引擎是否支持部分事务回滚。
1.2、设置表的存储引擎
mysql> SET DEFAULT_STORAGE_ENGINE=InnoDB;Query OK, 0 rows affected (0.00 sec)mysql>
或修改my.cnf配置文件
default-storage-engine=InnoDB
创建表时指定存储引擎
CREATE TABLE 表名(建表语句) ENGINE = 存储引擎名称;
修改表的存储引擎
mysql> ALTER TABLE `student01` ENGINE=InnoDB;Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0mysql>
MyISAM和InnoDB
| 对比项 | MyISAM | InnoDB |
|---|---|---|
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发操作 | 行锁,操作时只锁住某一行,不对其他行有影响,适合高并发操作 |
| 缓存 | 只缓存索引,不缓存真实数据 | 缓存索引和真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
| 自带系统表使用 | Y | N |
| 关注点 | 性能:节省资源,消耗少,简单业务 | 事务:并发写、事务、更大资源 |
| 默认安装 | Y | Y |
| 默认使用 | N | Y |
