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



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
15天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
161 5
|
1月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
77 15
|
1月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
37 1
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
140 6
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
58 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
55 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
57 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
85 0
|
5月前
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
327 17
|
6月前
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
121 0

推荐镜像

更多