今天是学习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/…