【MySQL入门】-- 认识MySQL存储引擎

news2024/9/21 11:07:37

目录

1.MySQL存储引擎有什么用?

2.MySQL的存储引擎有哪些?分别有什么特点?

3.存储引擎的优缺点

4.关于存储引擎的操作

5. 存储引擎的选择?

6.InnoDB和MyISAM区别?

7.官方文档


1.MySQL存储引擎有什么用?

MySQL之所以使用存储引擎,是因为存储引擎提供了不同的数据管理和存储方式,可以根据应用的需求选择合适的存储引擎来优化数据库的性能、一致性、安全性和可靠性。下面是一些具体的原因:

  1. 性能优化:不同的存储引擎对于不同类型的查询和操作有着各自的优势。选择合适的存储引擎可以根据应用需求提高数据库的查询速度、写入性能以及并发处理能力。

  2. 事务支持:一些存储引擎(如InnoDB)支持事务处理,可以确保数据的一致性和完整性。通过使用事务,可以将一系列操作当作一个逻辑单元进行提交或回滚,保证数据的正确性。

  3. 数据一致性与安全性:一些存储引擎实现了ACID(原子性、一致性、隔离性、持久性)特性,确保数据的一致性和安全性。通过将相关操作组合成事务,可以保证数据在多个并发访问下的完整性。

  4. 存储空间优化:不同的存储引擎采用不同的数据压缩和存储结构,可以节省存储空间。某些存储引擎支持数据的压缩,可以大幅度减小数据库占用的磁盘空间。

  5. 数据备份与恢复:一些存储引擎提供了在线备份和恢复机制,可以在备份数据的同时保持数据库的正常运行。这样可以降低备份对业务操作的影响,并提高数据库的可用性。

总之,使用存储引擎可以根据应用需求选择最合适的方式来组织和管理数据,从而提高数据库的性能、一致性、安全性和可靠性。不同的存储引擎具有不同的特点和功能,使用合适的存储引擎可以充分发挥MySQL的优势,提供更好的数据库解决方案。

2.MySQL的存储引擎有哪些?分别有什么特点?

MySQL存储引擎可以理解为数据库内部的一种组织和管理数据的方式,就好像是把书存放在书架上的不同方式一样。下面我用通俗易懂的话来介绍几种常见的MySQL存储引擎:

  1. MyISAM引擎:类似于传统的卡片盒,他把数据存储在独立的文件中,适合于读取频繁的场景。但是它不支持事务和并发操作,所以对于写入、修改和同时多个人访问的场景就不太适用了。

  2. InnoDB引擎:类似于图书馆的书架,它更适合处理复杂的数据库操作。它支持事务和并发操作,所以在高并发的环境下能够更好地保证数据的一致性和安全性。

  3. Memory引擎:就像是临时存储空间,数据保存在内存中,读写速度非常快。但是一旦重启数据库,数据就会丢失,所以适用于临时缓存和需要快速访问的数据。

  4. Archive引擎:像是把文件压缩成ZIP格式,这个引擎适用于数据归档和历史数据存储,可以大幅度减小磁盘空间的占用。

  5. CSV引擎:类似于Excel表格,数据以逗号分隔存储在文件中,适用于导入和导出数据。

每种存储引擎都有自己的特点和适用场景,选择合适的存储引擎可以提高数据库的性能和效率。当然,根据实际需求,也可以在同一个数据库中使用不同的存储引擎来处理不同类型的数据。

特点:

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

3.存储引擎的优缺点

MySQL提供了多种存储引擎,每个存储引擎都有其独特的优点和缺点。以下是一些常见的MySQL存储引擎及其特点:

  1. InnoDB:

    • 优点:支持事务处理和行级锁,适合处理大量并发操作;具备崩溃恢复能力和数据完整性保护机制;支持外键约束和高性能的读操作。
    • 缺点:对于大量的写操作,性能相对较低;占用更多内存和磁盘空间。
  2. MyISAM:

    • 优点:适合用于读密集型应用,具有高速的插入和查询性能;占用较少的内存和磁盘空间。
    • 缺点:不支持事务处理和行级锁;不支持外键约束和崩溃恢复能力;易发生表级锁定。
  3. MEMORY(也称为 HEAP):

    • 优点:数据存储在内存中,读写速度非常快;适用于对临时数据进行快速操作。
    • 缺点:数据库重启后数据丢失;对于大量数据,需要足够的内存。
  4. Archive:

    • 优点:占用较少的磁盘空间,适合存储大量历史数据;压缩数据以实现更高的存储效率。
    • 缺点:只支持插入和查询操作,不支持更新和删除;不支持事务处理和索引。
  5. NDB Cluster(MySQL Cluster):

    • 优点:适用于高可用性和高性能的分布式环境;支持数据分片和并行处理;具备自动故障恢复和负载均衡机制。
    • 缺点:配置和管理较为复杂;需要额外的硬件和网络资源。

4.关于存储引擎的操作

  • 查看当前默认的存储引擎

    SHOW VARIABLES LIKE 'default_storage_engine';
    
  • 查看所有可用的存储引擎

    SHOW ENGINES;
    
  • 创建表时指定存储引擎

    CREATE TABLE table_name (
      column1 datatype,
      column2 datatype,
      ...
    ) ENGINE = engine_name;
    
  • 修改表的存储引擎

    ALTER TABLE table_name ENGINE = engine_name;
  • 批量修改数据库中所有表的存储引擎

    SELECT CONCAT('ALTER TABLE ', table_name, ' ENGINE=engine_name;')
    FROM information_schema.tables
    WHERE table_schema = 'database_name';
    
  • 切换并重建表的存储引擎

    ALTER TABLE table_name ENGINE = engine_name, ALGORITHM=COPY;
    
  • 查看存储引擎的状态和统计信息

    SHOW ENGINE engine_name STATUS;
    SHOW ENGINE engine_name MUTEX;
    SHOW ENGINE engine_name INNODB STATUS;
    
  • 修改默认的存储引擎
    修改MySQL配置文件(my.cnf或者my.ini),将default_storage_engine设置为所需的存储引擎。

5. 存储引擎的选择?

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

6.InnoDB和MyISAM区别?

  1. 事务处理和锁定机制:

    • InnoDB支持事务处理,可以使用ACID(原子性、一致性、隔离性、持久性)特性保证数据的完整性和一致性。它还支持行级锁定,可以提供更好的并发处理能力。
    • MyISAM不支持事务处理,只支持表级锁定。这意味着在对一个表进行写操作时,其他会话无法对该表进行写操作。
  2. 数据完整性:

    • InnoDB支持外键约束,可以确保参照完整性,即通过外键关联的表之间的数据关系是有效的。
    • MyISAM不支持外键约束,不会强制执行参照完整性。
  3. 并发性能:

    • InnoDB在处理大量并发操作时具有良好的性能,它支持行级锁定,不会对整个表加锁,可以提高并发性能。
    • MyISAM在写入操作较多时性能较佳,因为它使用表级锁定,不需要处理复杂的锁定机制。
  4. 数据恢复和故障容错:

    • InnoDB具备崩溃恢复能力,可以在数据库崩溃后恢复数据,并保护数据的完整性。
    • MyISAM不具备崩溃恢复能力,如果数据库崩溃,则可能导致数据损坏或丢失。
  5. 全文索引:

    • InnoDB支持全文索引,可以进行高效的全文搜索。
    • MyISAM也支持全文索引,并且在这方面的性能较佳。
  6. 磁盘空间和缓存:

    • InnoDB占用更多的磁盘空间和内存,因为它需要存储事务日志和行级锁定信息等额外数据结构。
    • MyISAM占用较少的磁盘空间和内存,因为它没有像InnoDB那样的额外数据结构。

7.官方存储引擎文档

InnoDB 简介https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.htmlMyISAM 存储引擎https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

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

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

相关文章

2022 年第十二届 MathorCup 高校数学建模挑战赛D题思路

目录 一、前言 二、问题背景 三、问题 四、解题思路 (1)针对问题1: (2)针对问题2: (3)针对问题3: 五、附上几个典型代码 (1)K-means算法…

文献阅读:Foundation Transformers

文献阅读:Foundation Transformers 1. 文章简介2. 模型结构 1. Sub-LN2. Initialization 3. 实验效果 1. NLP任务 1. 语言模型上效果2. MLM模型上效果3. 翻译模型上效果 2. Vision任务上效果3. Speech任务上效果4. 图文任务上效果 4. 结论 & 思考 文献链接&…

卡尔曼滤波器使用原理以及代码编写

注:要视频学习可以去B站搜索“DR_CAN”讲解的卡尔曼滤波器,深有体会! 一、为啥需要卡尔曼滤波器 卡尔曼滤波器在生活中应用广泛,因为在我们生活中存在着不确定性,当我去描述一个系统,这个不确定性就包涵一…

源码编译LAMP与论坛安装

目录 Apache网站服务(著名的开源Web服务软件) Apache的主要特点 软件版本 如何创建论坛 安装相关服务Apache 安装MySQL数据库 安装PHP框架 然后进行论坛安装 第一步 先进入到MySQL内 第二步 授权bbs数据库 第三步 刷新数据库 第四步 解压指定…

【Windows】虚拟串口工具VSPD7.2安装

【Windows】虚拟串口工具VSPD7.2安装 1、背景2、VSPD7.2安装3、创建虚拟串口 1、背景 ​Virtual Serial Ports Driver​是由著名的软件公司Eltima制作的一款非常好用的​虚拟串口工具​,简称:VSPD。 VSPD其功能如同 Windows机器上COM 串行端口的仿真器…

Go-unsafe详解

Go语言unsafe包 Go语言的unsafe包提供了一些底层操作的函数,这些函数可以绕过Go语言的类型系统,直接操作内存。虽然这些函数很强大,但是使用不当可能会导致程序崩溃或者产生不可预料的行为。因此,使用unsafe包时必须小心谨慎。 …

小白必看!渗透测试的8个步骤

渗透测试与入侵的区别 渗透测试:以安全为基本原则,通过攻击者以及防御者的角度去分析目标所存在的安全隐患以及脆弱性,以保护系统安全为最终目标。 入侵:通过各种方法,甚至破坏性的操作,来获取系统权限以…

C++ 教程(15)——数组(包含实例)

C 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声…

[架构之路-215]- 系统分析-领域建模基本概念

目录 1. 什么是领域或问题域 2. 什么面向对象的“类” 》 设计类 3. 什么是概念类 4. 什么是领域建模 5. 领域建模与DDD(领域驱动架构设计)的关系 6. 领域建模的UML方法 7. 领域建模的案例 其他参考: 1. 什么是领域或问题域 领域&a…

Spring AOP之MethodInterceptor原理

文章目录 引言Spring AOP组成先看一下Advice 示例提问 原理 引言 之前我们讨论过了HandlerInterceptor,现在我们来看一下MethodInterceptor。 MethodInterceptor是Spring AOP中的一个重要接口,用来拦截方法调用,它只有一个invoke方法。 Spring AOP组成…

Laya3.0游戏框架搭建流程(随时更新)

近两年AI绘图技术有了长足发展,准备把以前玩过的游戏类型重制下,也算是圆了一个情怀梦。 鉴于unity商用水印和启动时间的原因,我决定使用Laya来开发。目前laya已经更新到了3.0以上版本,就用目前比较新的版本。 之后关于开发中遇到…

HashMap学习:1.7 迁移死循环分析(通俗易懂)

前言 JDK1.7由于采用的头插法,所以多线程情况下可能会产生死循环问题。 正文 头插法 就是每次从旧容器中的hash桶中取出数据后,放到新容器的头节点问题,如果此时头结点位置为空,直接放置即可,如果不为空将头节点的数…

C语言strncpy的使用缺陷和实现,strncat的使用缺陷和实现,strncmp的使用和实现。

1.strncpy 函数原型: char *strncpy( char *strDest, const char *strSource, size_t count );char *strDest 目标字符串首元素地址const char *strSource 源字符串(需要拷贝过去的字符串)size_t count 拷贝字符的个数char *strncpy 拷贝结束后,返回目…

Micormeter实战

Micrometer 为基于 JVM 的应用程序的性能监测数据收集提供了一个通用的 API,支持多种度量指标类型,这些指标可以用于观察、警报以及对应用程序当前状态做出响应。 前言 可接入监控系统 监控系统的三个重要特征: 维度(Dimensio…

[保姆教程] Windows平台OpenCV以及它的Golang实现gocv安装与测试(亲测通过)

一、MinGW & CMake 预备步骤 首先打开cmd: c: md mingw-w64 md cmake下载安装MinGW-W64 访问: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/7.3.0/ 下载: MinGW-W64 GCC-8…

一文详解Softmax的性质与Self-Attention初步解析

概述 最近研究超平面排列(Hyperplane Arrangement)问题的时候,发现ReLU有其缺陷,即举例来说,ReLU 无法使用单一的超平面将分离的所有数据,完整的输出,即只会输出半个空间映射的数据,而另一半空间的数据被置…

面试---简历

项目 1.1、商品管理 新增商品 同时插入商品对应的使用时间数据,需要操作两张表:product,product_usetime。在productService接口中定义save方法,该方法接受一张Dto对象,dto对象继承自product类,并将prod…

学习open62541 --- [78] 单线程和多线程的使用场景

open62541提供多线程功能,默认不开启,即单线程, 把UA_MULTITHREADING的值设置为 > 100就可以开启多线程了。 这里单线程/多线程的意思是基于open62541运行的server内部是否使用锁去保护数据。只要server运行后还有读写操作需要做&#x…

从源码全面解析 dubbo 消费端服务调用的来龙去脉

👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

3D 顶点着色与Phong 反射模型

Phong 反射模型有时被称为“Phong 照明”或“Phong 照明”。它由环境光照、漫反射(朗伯反射)、镜面反射三部分组成。 Phong 反射模型提供了一个方程式,用于计算表面上每个点的光照,I_p: 第一部分代表环境光项。在GLSL代…