MySQL进阶 -存储引擎

news2024/11/20 12:28:43

目录

  • 存储引擎
    • MySQL的体系结构
    • 存储引擎简介
    • InnoDB存储引擎
    • MyISAM存储引擎
    • Memory存储引擎
    • InnoDB,MyISAM和Memory的区别
    • 存储引擎的选择
    • 小结

存储引擎

MySQL的体系结构

  • MySQL的体系结构图:
    在这里插入图片描述
    MySQL服务端的体系结构(MySQL Server):
    分层,分为连接层,服务层,存储引擎层,存储层。

  • 连接层:
    主要是接收客户端的连接,完成一些连接处理,以及一些认证授权的操作(例如用户的登录等),一些安全方案,检查是否超过最大连接数等

  • 服务层:
    绝大多数核心功能都是在服务层完成的,像SQL接口,查询解析器,查询优化器,查询缓存,所有的跨存储引擎的实现也都是在服务层完成的

  • 存储引擎层:
    MySQL本身提供了很多的存储引擎,如果感觉不行还可以进行扩展,存储引擎控制的就是MySQL中数据提取和存入的方式,服务器会通过API和存储引擎进行通信,交互,索引就是在存储引擎层实现的,不同的存储引擎索引的结构是不一样的

  • 存储层:
    数据存储的地方

在这里插入图片描述

存储引擎简介

存储引擎是MySQL中特有的

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

一个数据库下的多张表可以选择不同的存储引擎

MySQL默认的存储引擎是InnoDB

查询建表语句:

show create table 表名;-- 可以查询到建立这张表的SQL语句
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 -- 默认存储引擎InnoDB
AUTO_INCREMENT=3 -- 自增的下一个id值
DEFAULT CHARSET=utf8mb4 -- 当前表的字符集
COLLATE=utf8mb4_0900_ai_ci -- 默认排序方式
COMMENT='账户表'
  • 创建表时指定存储引擎:
CREATE TABLE 表名(
	字段1 字段1类型 [COMMENT 字段1注释],
	......
	字段n 字段n类型 [COMMENT 字段n注释]	
)ENGINE=INNODB[COMMENT 表注释] -- 这里engine后跟的就是存储引擎名

create table 表名(
	字段1 字段1类型 [comment 字段1注释],
	......
	字段n 字段n类型 [comment 字段n注释]	
)engine=innodb[comment 表注释] -- 这里engine后跟的就是存储引擎名
  • 查看当前数据库支持的存储引擎:
SHOW ENGINES;

show engines;

练习:

create table my_myisam(
    id int primary key auto_increment comment 'ID',
    name varchar(10) comment 'name'
)engine =myisam;
show create table my_myisam;

CREATE TABLE `my_myisam` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `name` varchar(10) DEFAULT NULL COMMENT 'name',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM 
DEFAULT CHARSET=utf8mb4 
COLLATE=utf8mb4_0900_ai_ci

InnoDB存储引擎

InnoDB存储引擎是MySQL中一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB就是MySQL的默认存储引擎;

  • InnoDB的特点:
    1.InnoDB的DML操作遵循ACID(事务的四大特性)模型,支持事务。

    2.行级锁,提高并发访问性能

    3.支持外键FOREIGN KEY(foreign key)约束,保证数据的完整性和正确性

    用三个词概括就是:事务,外键,行级锁

  • InnoDB引擎所涉及到的磁盘文件:
    在InnoDB中,每一个表都会对应一个表空间文件(xxx.ibd,xxx是表名),这个文件会存储该表的:表结构(frm,sdi),数据和索引

    此外还有一个参数:innodb_file_per_table
    这个参数可以决定是多张表共用一个表文件还是一张表对应一个表文件,打开就代表一张表对应一个表文件,关闭相反,MySQL默认打开

    查看参数innodb_file_per_table的状况:

    show variables like 'innodb_file_per_table';
    

    使用指令:idb2sdi 表名.idb可以查看idb文件的情况

  • InnoDB引擎的逻辑存储结构
    主要分为5段:
    1.TableSpece:表空间
    2.Segment:段
    3.Extent:区
    4.Page:页
    5.Row:行
    在这里插入图片描述

MyISAM存储引擎

MyISAM是MySQL早期的默认存储引擎

  • MyISAM存储引擎特点:
    1.不支持事务,不支持外键

2.支持表锁,不支持行锁

3.访问速度块

  • MyISAM存储引擎所涉及到的磁盘文件
    有三个:xxx.MYD, xxx.MYI, xxx.sdi(xxx是表名)

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

Memory存储引擎

Memory存储引擎的表数据存放在内存中,由于数据存放在内存中,所以会收到硬件或断电问题的影响,这些影响可能会导致数据丢失,所以,使用Memory存储引擎的表一般当作临时表或缓存使用

  • Memory存储引擎的特点:
    1.数据存放在内存中。访问速度块

    2.默认是hash索引

  • Memory存储引擎所涉及到的磁盘文件
    只有xxx.sdi文件,用来存放表的结构信息,表的数据等信息都存放在内存中

InnoDB,MyISAM和Memory的区别

在这里插入图片描述

存储引擎的选择

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

  • InnoDB的应用场景
    如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新,删除操作,那么使用InnoDB存储引擎是比较合适的选择,例如:业务中的日志数据,电商中评论和足迹等

  • MyISAM的应用场景
    如果应用是以读取操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择MyISAM是很合适的

  • Memoey的应用场景
    因为Memoey将数据存放在内存中,访问速度块,所以常用于临时表和缓存,Memory的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性

绝大多数使用的存储引擎还是InnoDB,后面两个都被新的数据库的存储引擎给替代了

小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/591241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试经典面试题-定位不到元素

元素定位常见的面试相关问题 一、元素定位1、Selenium/Appium定位方法有几种?分别是?2、如何通过子元素定位父元素 二、元素定位不到1、定位不到元素是什么原因导致的?2、如何定位动态元素3、有的元素就加载页面上,但是你却定位不…

Rust 笔记:有限状态机原理/状态模式 及其 在Rust 编程中的应用

Rust 笔记、设计模式 有限状态机原理及其在Rust 编程中的应用 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263?spm1001.2101.3001.5343 邮箱 :291148484163.com 本文地址:https://blog.csdn.ne…

chatgpt赋能python:Python中拷贝的介绍

Python 中拷贝的介绍 在 Python 中,拷贝是一个十分常见而且必要的操作。拷贝可以在许多情况下被使用,例如在创建测试数据、编写一个新的算法时,或者是在处理多维数据结构的程序中。由于 Python 中的对象是动态类型的,因此在拷贝时…

IDEA 安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境,它具有许多优势,适用于各种开发过程。本文将介绍 IDEA 的主要优势,并提供详细的安装配置步骤。 介绍 IntelliJ IDEA(以下简称 IDEA)之所以被广泛使用,…

Linux系统下imx6ull QT编程—— C++基础(一)

Linux QT编程 文章目录 Linux QT编程前言一、 C的输入输出方式1.cout语法形式2.cin语法形式3.C之命名空间 namespace 前言 学习 C的面向对象编程,对学习 Qt 有很大的帮助 一、 C的输入输出方式 效率上,肯定是 C 语言的 scanf 和 printf 的效率高&#…

回归预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元多输入单输出回归预测

回归预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现SSA-CNN-GRU麻雀算法优…

代码随想录算法训练营第五十七天 | 回文

647. 回文子串 文档讲解:代码随想录 (programmercarl.com) 视频讲解:动态规划,字符串性质决定了DP数组的定义 | LeetCode:647.回文子串_哔哩哔哩_bilibili 状态:不会做。 思路 确定dp数组(dp table&#xf…

黑马Redis视频教程实战篇(一)

目录 一、短信登录 1.1、导入黑马点评项目 (1)导入黑马点评sql脚本 (2)导入后端项目 (3)导入前端项目 1.2、基于Session实现登录流程 1.3 、实现发送短信验证码功能 1.4 、实现登录拦截功能 1.5 、隐…

C语言——每日一题

1.倒置字符串 倒置字符串 要将每一个单词逆序输出,首先可以将整个字符串内容都逆序输出,然后再将字符串中的每一个单词再进行逆序。 例如:逆序 i like beijing. 先逆序成:.gnijieb ekil i 再将每个单词逆序: beij…

chatgpt赋能python:Python中字符串的转换方法

Python中字符串的转换方法 作为一门非常强大的编程语言,Python在字符串的处理上也有着非常丰富的功能。在Python中,字符串是非常重要的数据类型之一,也是最常用的数据类型之一。字符串在Python中有着很多的用途,比如表示文本数据…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(3)----获取ID

概述 一旦传感器被正确初始化,可以通过SPI或I2C接口向传感器发送读取命令,并接收传感器返回的数据。这个读取过程包括获取LSM6DS3TR传感器提供的加速度计和陀螺仪数据,以及传感器对应的温度信息。 获取数据状态 STATUS_REG (1Eh)是该传感器…

破解mysql用户的密码

假如mysql数据库中有一个 prod_blb 用户,你作为root管理员,想知道它的密码,又不想修改它的密码。这个时候就只能通过获取到 prod_blb 用户加密的密码进程破译 1、MYSQL加密方式 MYSQL数据库的认证密码有两种方式,MYSQL 4.1版本之…

python笔记16_实例练习_二手车折旧分析p1

python数据分析练习,具体数据不放出。 分析实践很简单。目的不是做完,而是讲清楚每一步的目的和连带的知识点(所以才叫学习笔记) 0.数据准备 原始数据格式:csv文件 原始数据结构: 数据格式 字段名 int…

使用Python处理PDF文件的简介与实践

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

ol中不同区域加载不同底图

概述 写一篇水文&#xff0c;讲讲如果在openlayers中实现不同的区域加载不同的底图。 效果 实现 通过tileUrlFunction实现不同切片地址的请求。 <!DOCTYPE html> <html><head><title>XYZ</title><link rel"stylesheet" href&qu…

从源码学习Transformer

Transformer总体结构 近几年NLP领域有了突飞猛进的发展&#xff0c;预训练模型功不可没。当前利用预训练模型&#xff08;pretrain models&#xff09;在下游任务中进行fine-tune&#xff0c;已经成为了大部分NLP任务的固定范式。Transformer摒弃了RNN的序列结构&#xff0c;完…

chatgpt赋能python:Python中捕获异常

Python中捕获异常 什么是异常&#xff1f; 在Python编程中&#xff0c;异常&#xff08;Exceptions&#xff09;是程序执行时发生的错误或意外情况。这些异常可能导致程序崩溃或不能正常运行。为了避免这种情况的发生&#xff0c;我们需要捕获异常并在程序执行时进行相应的错…

SAP-MM-发票校验基本功能详解

一、MIRO抬头数据 1、基本数据 发票日期&#xff1a;一般是指凭证日期&#xff0c;对应FI中的凭证日期&#xff1b; 过账日期&#xff1a;发票和FI凭证的过账日期&#xff1b;这两个日期都可以作为付款条件的计算日期&#xff1b; 金额、税额&#xff1a;这个是指实际发票的…

【探索】机器指令翻译成 JavaScript

前言 前些时候研究脚本混淆时&#xff0c;打算先学一些「程序流程」相关的概念。为了不因太枯燥而放弃&#xff0c;决定想一个有趣的案例&#xff0c;可以边探索边学。 于是想了一个话题&#xff1a;尝试将机器指令 1:1 翻译 成 JavaScript&#xff0c;这样就能在浏览器中&am…

chatgpt赋能python:Python中按下某个按键的实现方法

Python中按下某个按键的实现方法 Python是一种广泛应用于各种领域的高级编程语言&#xff0c;可以用于编写各种类型的应用程序和工具。其中&#xff0c;它在游戏开发方面有着广泛的应用。而在游戏开发过程中&#xff0c;按键响应是至关重要的一个组成部分。本文将带领读者了解…