为了管理方便,通常把连接管理、查询缓存、语法解析、查询优化这些并不设计真实数据存储的功能划分为MySQL Server 的功能,把真实存储数据的功能划分为存储引擎的功能。所以在MySQL Server完成查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端就可以了。

简而言之,存储引擎就是指表的类型(如InnoDB和MyISAM在文件系统的文件存储方式不一样)。
其实存储引擎以前叫做表处理器,后来改名为存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或读写操作。

1、存储引擎相关操作

1.1 查看存储引擎

  1. # 查看存储引擎
  2. mysql> show engines;
  3. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
  4. | Engine | Support | Comment | Transactions | XA | Savepoints |
  5. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
  6. | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
  7. | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
  8. | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
  9. | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
  10. | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
  11. | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
  12. | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
  13. | CSV | YES | CSV storage engine | NO | NO | NO |
  14. | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
  15. +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
  16. 9 rows in set (0.00 sec)
  17. mysql>

Transactions:表示存储引擎是否支持事务 YES表示支持,NO表示不支持
XA:表示存储引擎所支持的分布式是否符合XA规范。即存储引擎是否支持分布式事务。
Savepoints:表示存储引擎是否支持事务处理的保存点,即该存储引擎是否支持部分事务回滚。

1.2、设置表的存储引擎

  1. mysql> SET DEFAULT_STORAGE_ENGINE=InnoDB;
  2. Query OK, 0 rows affected (0.00 sec)
  3. mysql>

或修改my.cnf配置文件

  1. default-storage-engine=InnoDB

创建表时指定存储引擎

  1. CREATE TABLE 表名(
  2. 建表语句
  3. ) ENGINE = 存储引擎名称;

修改表的存储引擎

  1. mysql> ALTER TABLE `student01` ENGINE=InnoDB;
  2. Query OK, 0 rows affected (0.03 sec)
  3. Records: 0 Duplicates: 0 Warnings: 0
  4. mysql>

MyISAM和InnoDB

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发操作 行锁,操作时只锁住某一行,不对其他行有影响,适合高并发操作
缓存 只缓存索引,不缓存真实数据 缓存索引和真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
自带系统表使用 Y N
关注点 性能:节省资源,消耗少,简单业务 事务:并发写、事务、更大资源
默认安装 Y Y
默认使用 N Y