学习MySQL系列:7. MySQL初探存储引擎InnoDB

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

今天是学习MySQL的第6天,今天来看看MySQL 的存储引擎简介,以及InnoDB储存引擎。

什么是MySQL存储引擎

MySQL中有很多存储引擎,例如: InnoDBMyISAMMEMORY等,我们可以使用show engines;来查看支持的存储引起,例如:

上述存储引起中,MySQL 5.7默认存储引擎是InnoDB,我们可以对比一下InnoDBMyISAMMemory存储引擎。

特性/存储引擎InnoDBMyISAMMEMORY
B数索引
存储限制64TB256TB内存
压缩数据×
数据缓存××
外键支持××
全文检索索引×
哈希索引××
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的默认引擎,除非我们在建表的时候像前面那样明确指出使用什么存储引擎外,默认都是InnoDBMySQL 5.7环境下。其特性为高性能和高可用,其优势在于

  • 支持事务
  • 支持行锁
  • 支持外键

所谓的支持事务,其实是指InnoDB引入ACID模型,InnoDB严格遵循ACID模型的存储引擎,即 原子性、一致性、隔离性 以及 耐久性。

所谓的行锁,则更为复杂,其中包括, 共享锁和排他锁,记录锁,间隙锁 等等,这里不展开讲解。

支持外键约束,允许MySQL垮表交叉引用数据,减少冗余,且能够使相关数据保持一致性。

InnoDB行格式

InnoDB存储引擎目前支持4种行模式,分别是REDUNDANTCOMPACTDYNAMIC以及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, generalAntelope or Barracuda
COMPACT×××system, file-per-table, generalAntelope or Barracuda
DYNAMIC×system, file-per-table, generalBarracuda
COMPRESSEDfile-per-table, generalBarracuda

总结

我们今天学习了MySQL存储引擎,其有众多引擎,包括: InnoDBMemoryMyISAM 等,尤其是看了默认引擎InnoDB,其优势在于支持事务、支持行锁、支持外键,其行格式分别为REDUNDANTCOMPACTDYNAMIC以及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/…

posted @ 2022-08-02 22:31  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源