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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 学习MySQL系列:7. MySQL初探存储引擎InnoDB

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



什么是MySQL存储引擎


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

image.png


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

特性/存储引擎 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;

image.png

由于数据是放在内存中的,所以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';


image.png


那我们除了修改其系统变量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;

image.png

其中,行格式的对比区别,我也列出来了,请看:

行格式 紧凑的存储特性 增强的可变长度列存储 大索引键前缀支持 压缩支持 支持的表空间类型 所需文件格式
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存储引擎,其有众多引擎,包括: 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/…



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
存储 缓存 关系型数据库
MySQL高级篇——存储引擎和索引
MyISAM:不支持外键和事务,表锁不适合高并发,只缓存索引,内存要求低,查询快MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。5.5之前默认的存储引擎优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高表名.frm 存储表结构;表名.MYD 存储数据 (MYData);
MySQL高级篇——存储引擎和索引
|
10天前
|
存储 SQL 缓存
InnoDB 存储引擎以及三种日志
InnoDB 存储引擎以及三种日志
19 0
|
2月前
|
监控 关系型数据库 MySQL
在Linux中,mysql的innodb如何定位锁问题?
在Linux中,mysql的innodb如何定位锁问题?
|
2月前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
57 6
|
2月前
|
存储 关系型数据库 MySQL
MySQL 中的事务存储引擎深入解析
【8月更文挑战第31天】
36 0
|
3月前
|
存储 SQL 关系型数据库
(十三)MySQL引擎篇:半道出家的InnoDB为何能替换官方的MyISAM?
MySQL是一款支持拔插式引擎的数据库,在开发过程中你可以根据业务特性,从支持的诸多引擎中选择一款适合的,例如MyISAM、InnoDB、Merge、Memory(HEAP)、BDB(BerkeleyDB)、Example、Federated、Archive、CSV、Blackhole.....
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
4月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.3-InnoDB中的锁
【MySQL技术内幕】6.3-InnoDB中的锁
188 57
|
4月前
|
存储 关系型数据库 MySQL
关系型数据库mysql的InnoDB
【6月更文挑战第17天】
36 3
|
3月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
109 0