欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > MySQL数据库 - 存储引擎

MySQL数据库 - 存储引擎

2025/4/16 5:25:27 来源:https://blog.csdn.net/xian_x_/article/details/147260531  浏览:    关键词:MySQL数据库 - 存储引擎

存储引擎

此笔记参考黑马教程,仅学习使用,如有侵权,联系必删

文章目录

  • 存储引擎
    • 1. MySQL 体系结构
    • 2. 存储引擎简介
      • 2.1 语法
      • 代码演示
    • 3. 存储引擎特点
      • InnoDB
        • 介绍
        • 特点
        • 文件
        • 逻辑存储结构
      • MyISAM
        • 介绍
        • 特点
        • 文件
      • Memory
        • 介绍
        • 特点
        • 文件
      • 总结
    • 4. 存储引擎选择
    • 总结

1. MySQL 体系结构

  • MySQL 体系结构图

  • 连接层:接收客户端的连接,完成一些连接的处理,以及认证授权的相关操作,以及相关的一些安全方案,还要去检查是否超过最大连接数等等

    • 我们输入用户名、密码后就是在连接层校验用户名、密码(授权认证)
    • 授权认证完成后,还要去校验每一个客户端所具有的权限,能够操作哪些数据库、哪些表
  • 服务层:绝大部分的核心功能都是在服务层完成的,像 sql 接口、查询解析器、查询优化器、查询缓存,所有跨存储引擎的实现也都是在服务层实现的,比如 DML 语句、DDL 语句的封装还有存储、过程视图触发器都是在第二层

  • 引擎层:在 MySQL 中提供了很多存储引擎供我们选择,而且,如果这些存储引擎不能够满足我们的需求,我们还可以在其基础上进行拓展,所以称之为可插拔式的存储引擎

    • 存储引擎控制的就是 MySQL 当中的数据的存储和提取的方式,服务器会通过 API 和存储引擎来进行通信和交互
    • InnoDB 引擎是 MySQL 5.5 版本之后默认的存储引擎
  • 存储层:存储引擎控制的是数据库的数据该如何来存、如何来取、如何来进行组织。而具体的数据库的数据最终是存储在磁盘当中的,所以最后一层存储层主要是来存储数据库的相关数据,这里面包含一系列的日志,像 Redo log、Undo log、数据、索引二进制志、错误日志、查询日志、慢查询日志


2. 存储引擎简介

  • 存储引擎是存储数据、建立索引、更新 / 查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型

  • 查询建表语句

-- 查询建表语句 --- 默认的存储引擎:InnoDB
show create table account;
  • 结果
CREATE TABLE `account` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`money` int DEFAULT NULL COMMENT '余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='账户表'
  • ENGINE表示存储引擎
  • AUTO_INCREMENT=5指代的是 id 是自增的,当插入下一条数据的时候申请的 id 是5
  • DEFAULT CHARSET=utf8mb4当前表的字符集默认的 utf8mb4
  • COLLATE=utf8mb4_0900_ai_ci表示排序方式
  • COMMENT='账户表'表示注释信息

2.1 语法

  • 创建表时,指定存储引擎
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],...字段n 字段n类型 [COMMENT 字段n注释]
) ENGINE = INNODB [COMMENT 表注释];
  • 查看当前数据库支持的存储引擎
show engines;
  • InnoDB 是现在版本默认的存储引擎
  • MyISAM 是 MySQL 早期版本的默认存储引擎
  • MEMORY 存储在内存当中,通常用来做临时表及缓存

代码演示

-- 创建表 my_myisam,并指定MyISAM存储引擎
create table my_myisam
(id   int,name varchar(10)
) engine = MyISAM;-- 创建表my_memory,指定Memory存储引擎
create table my_memory
(id   int,name varchar(10)
) engine = Memory;

3. 存储引擎特点

InnoDB

介绍
  • InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 存储引擎
特点
  • DML 操作遵循 ACID 模型,支持事务
  • 行级锁,提高访问性能;
  • 支持外键 FOREIGN KEY 约束,保证数据的完整性和正确性;
文件
  • xxx.ibd:xxx 代表的是表名,InnoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引
  • 参数:innodb_file_per_table
逻辑存储结构


MyISAM

介绍
  • MyISAM 是 MySQL 早期的默认存储引擎
特点
  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快
文件

  • xxx.sdi:存储表结构信息
  • xxx.MYD:存储数据
  • xxx.MYI:存储索引

Memory

介绍
  • Memory 引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或者缓存使用
特点
  • 内存存放
  • hash 索引(默认)【哈希索引】
文件
  • xxx.sdi:存储表结构信息

总结

特点InnoDBMyISAMMemory
存储限制64TB
事务安全支持--
锁机制行锁表锁表锁
B+tree 索引支持支持支持
Hash 索引--支持
全文索引支持(5.6版本之后)支持-
空间使用N/A
内存使用中等
批量插入速度
支持外键支持--

4. 存储引擎选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合

  • InnoDB:是 MySQL 的默认引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么 InnoDB 存储引擎是比较适合的选择
  • MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的
  • MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性

总结

  1. 体系结构
  • 连接层、服务层、引擎层、存储层
  1. 存储引擎简介
SHOW ENGINES; # 查看当前数据库所支持的存储引擎
CREATE TABLE XXXX(...) ENGINE=INNODB; # 创建表的时候指定存储引擎
  1. 存储引擎特点
  • INNODB 与 MyISAM:事务、外键、行级锁
  1. 存储引擎应用
  • INNODB:存储业务系统中对于事务、数据完整性要求较高的核心数据
  • MyISAM:存储业务系统的非核心事务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词