存储引擎就是指表的类型,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
一、查看存储引擎
SHOW ENGINES;
二、设置系统默认的存储引擎
查看默认的存储引擎
show variables like '%storage_engine%';
修改默认的存储引擎
如果在创建表的语句中没有显式指定表的存储引擎的话,就会默认使用InnoDB作为表的存储引擎。修改默认的存储引擎格式如下:
SET DEFAULT_STORAGE_ENGINE = MyISAM;
三、设置表的存储引擎
1.创建表时指定存储引擎:
CREATE TABLE 表名(建表语句;
)ENGINE = 存储引擎名称;
2.修改表的存储引擎:
ALTER TABLE 表名 ENGINE = 存储引擎名称;
四、存储引擎介绍:
1.InnoDB引擎:具备外键支持功能的事务存储引擎
MySQL从3.23.34a开始就包含InnoDB存储引擎,大于等于5.5之后默认采用InnoDB引擎。InnoDB是MySQL的默认事务引擎,它被设计用来处理大量的短期事务,可以确保事务的完整提交和回滚。除了增加和查询外,还需要更新、删除操作,应该优先选用InnoDB存储引擎。除非有特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。对比MyISAM存储引擎,InnoDB的写效率差一些,并且会占用更多的磁盘空间以保存数据和索引。但是适用于处理巨大的数据量。
2.MyISAM引擎:主要的非事务处理存储引擎
MyISAM提供了大量的特性,包括全文索引,压缩,空间函数等。但是MyISAM不支持事务、行级锁、外键。崩溃后无法安全恢复。但是访问速度快,适用于对事务完整性没有要求或者以SELECT和INSERT应用为主的场景。针对数据统计有额外的常数存储,COUNT(*)效率高。
MyISAM存储引擎和InnoDB存储引擎的对比:
对比项 | MyISAM | InnoDB |
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行级锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发 | 行锁,适合高并发 |
缓存 | 只缓存索引,不缓存真实数据 | 缓存索引和真实数据 |
自带系统表使用 | Y | N |
关注点 | 节省资源、耗能少、简单业务 | 并发写、事务、更大的资源 |
默认安装 | Y | Y |
默认使用 | N | Y |
3.Archive引擎:用于数据存档
仅仅支持插入和查询两种功能,不支持数据修改功能。拥有很好的压缩机制,适合存储大量的独立的作为历史记录的数据,拥有很高的插入速度,但是对查询的支持较差。
4.Blackhole引擎:丢弃写操作,读操作会返回空内容
Blockhole引擎没有实现任何存储机制,它会丢弃所有插入的数据,不做任何保存,但是服务器会记录日志,可以用于赋值数据到备用的数据库,或者简单的记录到日志中。
5.CSV引擎:存储数据时,以逗号分隔各个数据项
可以将普通的CSV文件作为MySQL的表处理,但不支持索引。
6.Memory引擎:置于内存的表
Memory采用的逻辑介质是内存,对应速度很快。但是当mysqld守护进程崩溃时数据会丢失,另外要求存储的数据是数据长度不变的格式。同时支持哈希索引和B+树索引,并且表的大小是受到限制的。适用于目标数据比较小,而且非常频繁的进行访问。
7.Federated引擎:访问远程表
8.Merge引擎:管理多个MyISAM表构成的集合
9.NDB引擎:MySQL集群专用存储引擎