今天是学习MySQL的第6天,今天来看看MySQL 的存储引擎简介,以及InnoDB储存引擎。
什么是MySQL存储引擎
MySQL中有很多存储引擎,例如: InnoDB、MyISAM、MEMORY等,我们可以使用show engines;来查看支持的存储引起,例如:
上述存储引起中,MySQL 5.7默认存储引擎是InnoDB,我们可以对比一下InnoDB、MyISAM、Memory存储引擎。
| 特性/存储引擎 | InnoDB | MyISAM | MEMORY |
| B数索引 | √ | √ | √ |
| 存储限制 | 64TB | 256TB | 内存 |
| 压缩数据 | √ | √ | × |
| 数据缓存 | √ | × | × |
| 外键支持 | √ | × | × |
| 全文检索索引 | √ | √ | × |
| 哈希索引 | × | × | √ |
| MVCC | √ | × | × |
| 锁机制 | 行 | 表 | 表 |
看不懂上述表格,也暂时没关系,大致知晓这几种存储引擎就可以了,不重要,我们重点学习InnoDB。
我们如何创建数据库的时候指定存储引擎呢?
例如我们想创建一个表名为pdudo_mem,其存储引擎为: Memory。我们可以这样写
create table pdudo_mem ( id int , name varchar(128) , age int ) engine=memory default charset=utf8;
由于数据是放在内存中的,所以MySQL服务器重启后,数据就会丢掉,适合放一些临时数据,用作缓存的。可以自行测试。
我们上述创建了表,且指定了存储引擎,这里可以注意下,所谓的存储引擎是针对表的,而不是针对库的,所以也称之为表类型。
InnoDB存储引擎简介
InnoDB作为MySQL 5.7的默认引擎,除非我们在建表的时候像前面那样明确指出使用什么存储引擎外,默认都是InnoDB在MySQL 5.7环境下。其特性为高性能和高可用,其优势在于
- 支持事务
- 支持行锁
- 支持外键
所谓的支持事务,其实是指InnoDB引入ACID模型,InnoDB严格遵循ACID模型的存储引擎,即 原子性、一致性、隔离性 以及 耐久性。
所谓的行锁,则更为复杂,其中包括, 共享锁和排他锁,记录锁,间隙锁 等等,这里不展开讲解。
支持外键约束,允许MySQL垮表交叉引用数据,减少冗余,且能够使相关数据保持一致性。
InnoDB行格式
InnoDB存储引擎目前支持4种行模式,分别是REDUNDANT、COMPACT、DYNAMIC以及COMPRESSED。其行格式决定了其物理存储,默认的行模式是: DYNAMIC,我们可以通过如下语句查询:
show variables where variable_name = 'innodb_default_row_format';
那我们除了修改其系统变量innodb_default_row_format来使用不同的行格式,还有其他方法么? 当然有,我们可以创建表的时候指定行格式,或者修改表结构来重新指定行格式即可。
例如我们创建表ttt,其中只有一列为aaa类型为int。
我们创建表,并且指定行格式为: dynamic。
create table ttt(name1 varchar(10),name2 varchar(20)) row_format=dynamic;
我们将其行格式修改为COMPACT。
alter table ttt row_format=COMPACT;
其中,行格式的对比区别,我也列出来了,请看:
| 行格式 | 紧凑的存储特性 | 增强的可变长度列存储 | 大索引键前缀支持 | 压缩支持 | 支持的表空间类型 | 所需文件格式 |
| REDUNDANT | × | × | × | × | system, file-per-table, general | Antelope or Barracuda |
| COMPACT | √ | × | × | × | system, file-per-table, general | Antelope or Barracuda |
| DYNAMIC | √ | √ | √ | × | system, file-per-table, general | Barracuda |
| COMPRESSED | √ | √ | √ | √ | file-per-table, general | Barracuda |
总结
我们今天学习了MySQL存储引擎,其有众多引擎,包括: InnoDB、Memory、MyISAM 等,尤其是看了默认引擎InnoDB,其优势在于支持事务、支持行锁、支持外键,其行格式分别为REDUNDANT、COMPACT、DYNAMIC以及COMPRESSED,动手来试试吧。
资料引用:
Memory存储引擎: dev.mysql.com/doc/refman/…
MyISAM存储引擎: dev.mysql.com/doc/refman/…
InnoDB存储引擎: dev.mysql.com/doc/refman/…
InnoDB 行格式: dev.mysql.com/doc/refman/…



