MySQL有很多存储引擎(也叫数据引擎)。所谓存储引擎是指存储、处理和保护数据的核心服务。即存储引擎是数据库的底层软件组织。在MySQL中,可以使用“showengines”来查询数据库的所有存储引擎,如下图所示:在上面的列表中,我们有以下三种最常用的存储引擎:InnoDBMyISAMMEMORY我们分别来看一下。1、InnoDBInnoDB是MySQL5.1之后默认的存储引擎。它支持事务,支持外键,支持崩溃修复和自增列。如果对生意的诚信要求高,比如张三给李四转钱,就要减少张三的钱,同时给李四加钱。这个时候只能全部执行成功或者全部执行失败。这时候可以使用InnoDB来控制事务的提交和回滚,保证业务的完整性。优缺点分析InnoDB的优点是支持事务、外键、崩溃修复和自增列;缺点是读写效率差,数据空间大。2、MyISAMMyISAM是MySQL5.1之前默认的数据库引擎。读取效率高,占用数据空间小,但不支持事务、行级锁、外键。由于不支持行级锁,在增删改查操作时进行表锁操作,因此其写入效率较低。优缺点分析MyISAM引擎保存了一个单独的索引文件.myi,其索引直接位于OFFSET,而InnoDB没有单独的物理索引存储文件,InnoDB索引寻址先位于blockdata,再位于row数据,所以MyISAM的查询效率比InnoDB高。但不支持事务和外键,适合读多写少,对完整性要求不高的业务场景。3、MEMORY内存型数据库引擎,所有数据都保存在内存中,因此其读写效率非常高,但MySQL服务重启后数据会丢失。也不支持事务,不支持外键。MEMORY支持Hash索引或B-tree索引。哈希索引是基于键查询的,所以查询效率特别高,但是如果是基于范围查询,效率就比较低。前两个存储引擎都是基于B+树的数据结构实现的。优缺点分析MEMORY读写性能高,但MySQL服务重启后数据会丢失,不支持事务和外键。适用场景是对读写效率要求高,但对数据丢失不敏感的业务场景。4、查看和设置存储引擎4.1查看存储引擎存储引擎的设置粒度是表级的,即可以为每个表设置不同的存储引擎。我们可以使用如下命令查询表的存储引擎:showcreatetablet;如下图所示:4.2设置存储引擎创建表时设置存储引擎:修改已有表的存储引擎:总结一下MySQL中最常见的存储引擎:InnoDB、MyISAM和MEMORY,其中InnoDB是MySQL5.1之后默认的存储引擎。它支持事务、外键、崩溃修复和自增列。特点是稳定(可以保证业务的完整性),但数据读写效率一般;而MyISAM的查询效率高,但不支持事务和外键;MEMORY读写效率最高,但由于数据存放在内存中,MySQL服务重启后数据会丢失,因此只适用于对数据丢失不敏感的业务场景。判断是非在自己,名誉在别人,得失在人数。公众号:Java面试真题分析面试合集:https://gitee.com/mydb/interview
