MySQL之数据库引擎详解(内附面试题:InnoDB和MyISAM的联系与区别)

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于MySQL数据库引擎的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一. 数据库引擎是什么?

1.数据库引擎概念

2.最常见的引擎

①. InnoDB:

概念:

特点:

总结:

②. MyISAM:

概念:

特点:

总结:

③. Memory:

概念:

特点:

总结:

④. Archive:

概念:

特点:

总结:

💡💡辉辉小贴士:InnoDB和MyISAM的联系与区别(面试题)

二.为什么要学习MySQL数据库引擎?

三.存储引擎查看

四.SQL标准的四种隔离级别  

1.概念

①.读未提交(Read Uncommitted):

②.读已提交(Read Committed):

③.可重复读(Repeatable Read):

④.可串行化(Serializable):

2.事务隔离级别问题

①脏读

②幻读

③不可重复读

💡💡辉辉小贴士:三者间的区别

五.ACID事务是什么 


一. 数据库引擎是什么?

1.数据库引擎概念

MySQL数据库引擎是用于管理数据库表的存储和检索的软件组件。它负责处理数据在磁盘上的物理存储、索引、事务处理和并发控制等方面的功能

⭐⭐MySQL的核心就是存储引擎

2.最常见的引擎

  • ①. InnoDB:

    • 概念:
      • InnoDB是MySQL的默认存储引擎自MySQL 5.5版本开始。它支持事务、行级锁定、外键约束和崩溃恢复等功能,适用于需要高并发性和数据完整性的应用
    • 特点:
      • 1. 事务支持:InnoDB是一个支持事务的引擎。它遵循ACID(原子性、一致性、隔离性和持久性)特性,能够确保并发事务之间的数据一致性和完整性。这意味着你可以在InnoDB表上执行BEGIN、COMMIT和ROLLBACK等命令,实现对数据修改的原子性操作

      • 2. 行级锁定:InnoDB使用行级锁定机制,允许多个事务同时对同一表中的不同行进行读写操作。这样可以提高并发性能并减少锁冲突。与传统的表级锁定相比,行级锁定提供了更细粒度的锁定控制,减少了锁定竞争对性能的影响

      • 3. 外键约束:InnoDB支持外键约束,这使得在多个表之间建立关联关系变得更加容易和可靠。外键约束可以保持数据的引用完整性,并在需要时执行级联操作。它通过检查插入、更新和删除操作是否满足约束条件来确保数据一致性

      • 4. 崩溃恢复:InnoDB具有强大的崩溃恢复能力。它使用日志(log)和检查点(checkpoint)机制来保证即使在数据库或系统崩溃后,数据的一致性也可以得到恢复。崩溃恢复机制可以确保数据在数据库重新启动时保持一致性,并保护数据免受损坏和丢失

      • 5. 高并发性能:InnoDB在处理高并发读写操作时表现出色。由于使用行级锁定,多个事务可以同时对同一表进行读写操作,减少了锁定冲突和阻塞现象。此外,InnoDB还实现了高效的缓冲池(Buffer Pool)机制,可以提高数据的访问速度和响应性能

      • 6.支持热备份:InnoDB支持在线备份和恢复,允许在备份期间继续进行数据库操作。这意味着你可以在不中断数据库正常运行的情况下进行备份,确保数据的安全性和可用性

    • 总结:
      • 综上所述,InnoDB是一个功能强大、可靠和可扩展的数据库引擎。它提供了事务支持、行级锁定、外键约束、崩溃恢复、高并发性能和热备份等特性,适用于对数据一致性和可靠性有较高要求的应用场景

-------------------------------------------------------------------------------------------------------------------------

  • ②. MyISAM:

    • 概念:
      • MyISAM是MySQL的另一个常见存储引擎,它不支持事务,只支持表级锁定。MyISAM对于读取密集型应用具有较好的性能,适合用于非事务性的应用场景,例如博客、新闻等
    • 特点:
      • 1. 高查询性能:MyISAM在执行读操作(SELECT)方面表现出色,特别适用于读取密集型应用。它使用表级锁定,允许多个读操作同时进行,从而提高查询的并发性能

      • 2. 低存储空间需求:相对于InnoDB引擎,MyISAM在存储方面通常占用更少的磁盘空间。MyISAM采用表格级锁定和不支持事务的机制,减少了存储空间的开销

      • 3. 不支持事务:MyISAM引擎不支持事务,这意味着它不支持事务的原子性和一致性,无法提供多个操作的回滚能力。如果应用对事务处理要求较高,例如需要保持数据的一致性和完整性,那么MyISAM可能不是一个合适的选择

      • 4. 不支持外键约束:MyISAM引擎不支持外键约束的功能,不能在数据库级别上维护表之间的引用完整性。这意味着在MyISAM表中,你需要手动确保数据的一致性,包括维护表之间的关联关系和约束条件

      • 5. 不支持崩溃恢复:相对于InnoDB引擎提供的强大的崩溃恢复能力,MyISAM引擎对于数据库或系统的崩溃后恢复数据的能力较弱。因此,在对数据的持久性和可靠性有较高要求的情况下,MyISAM可能不是最合适的选择

    • 总结:
      • 综上所述,MyISAM是一个适用于读取密集型应用并对存储空间效率有较高要求的数据库引擎。它具有高查询性能和较低的存储空间需求,但不支持事务、外键约束和崩溃恢复。在选择使用MyISAM之前,需要根据具体的应用需求进行权衡,考虑读写比例、数据一致性和可靠性要求等因素

-------------------------------------------------------------------------------------------------------------------------

  • ③. Memory:

    • 概念:
      • Memory引擎将表数据存储在内存中,提供非常高的访问速度,但数据在数据库服务器断电或重启时会丢失。它适用于需要频繁读写临时数据的应用,如缓存、临时表等
    • 特点:
      • 1. 内存中存储:Memory引擎将表的数据存储在内存中,而不是磁盘上。这使得它的读写操作非常高效,对于读取和写入操作具有非常快的响应速度。由于数据存储在内存中,可以极大地降低磁盘I/O的开销 
      • 2. 表级锁定:Memory引擎使用表级锁定机制,这意味着在进行写操作时需要锁定整个表,这可能导致并发写操作之间的冲突和阻塞。然而,在读取操作时不需要锁定,因此可以实现高并发的读取能力
      • 3. 不支持事务和崩溃恢复:Memory引擎不支持事务处理和崩溃恢复。这意味着它不提供像InnoDB引擎那样的事务保证和崩溃恢复机制。如果你的应用需要事务支持或对数据的持久性和可靠性要求较高,可能不适合使用Memory引擎
      • 4. 不支持外键约束:Memory引擎不支持外键约束的功能,不能在数据库级别上维护表之间的引用完整性。这意味着在Memory表中,你需要手动确保数据的一致性,包括维护表之间的关联关系和约束条件
      • 5. 适用于临时数据和高速缓存:由于Memory引擎将数据存储在内存中,它特别适合存储临时数据和高速缓存。例如,可以将经常被查询的热门数据缓存到Memory表中,以提高读取性能
    • 总结:
      • 综上所述,Memory引擎适用于对读取速度要求较高的场景,如缓存、临时表和高速数据处理。它具有快速的读写操作以及不需要磁盘I/O的优势,但不支持事务、表级锁定和崩溃恢复等功能。在选择使用Memory引擎之前,需要根据具体的应用需求进行权衡,考虑读写比例、数据一致性和可靠性要求等因素
      • ⭐⭐需要注意的是,由于Memory引擎将数据存储在内存中,因此对于存储空间的利用和管理需要谨慎考虑。此外,由于内存的限制,Memory表可能无法处理大型数据集或需要频繁修改的数据

-------------------------------------------------------------------------------------------------------------------------

  • ④. Archive:

    • 概念:
      • Archive引擎以高压缩比优化了存储空间,并提供快速的插入和查询操作。它适用于存档和日志记录等场景,但不支持索引和更新操作
    • 特点:
      • 1. 高度压缩:Archive引擎以高度压缩的方式存储数据,可以极大地减少存储空间的需求。它使用类似于zip压缩算法的方式来存储数据,因此可以在磁盘上保存大量的归档数据
      • 2.适合归档数据Archive引擎适用于那些不经常进行更新操作的归档数据。归档数据通常是一次性写入,很少或不会进行修改或删除。因此,Archive引擎适用于存储历史数据、日志文件等不再经常进行读写操作的数据
      • 3. 高度限制:Archive引擎对表的功能和使用有很多限制。它不支持索引,因此只能进行全表扫描的查询操作,查询速度可能会受到影响。同时,Archive表不支持事务、行级锁定和外键约束等功能
      • 4. 仅支持插入和查询:Archive引擎只支持插入和查询操作,不支持更新和删除操作。如果需要修改归档数据,必须先将数据复制到非Archive表中进行修改,然后再重新归档
      • 5. 低存储和高性能:由于高度压缩和仅支持插入和查询操作的特性,Archive引擎在存储上具有很高的效率,并且可以实现较快的查询速度。它适用于那些需要长期保存的大量历史数据,同时又不常需要进行查询操作
    • 总结:
      • 综上所述,Archive引擎是一种适用于存储和查询归档数据的MySQL存储引擎。它以高度压缩的方式存储数据,适用于不经常更新的归档数据。然而,由于其功能限制和不支持事务、索引等特性,需要根据具体的应用需求和数据访问模式进行权衡和选择
      • ⭐⭐需要注意的是,由于Archive引擎的特性限制,它并不适用于那些需要频繁进行更新、查询和事务处理的数据。如果数据需要经常被修改或删除、需要支持复杂查询或具有安全性约束,那么其他的存储引擎(例如InnoDB或MyISAM)可能更适合

此外,还有其他一些MySQL数据库引擎,如CSV、Blackhole、Federated等,每个引擎都有自己的特点和适用场景。开发者可以根据应用需求选择适合的数据库引擎

💡💡辉辉小贴士:InnoDB和MyISAM的联系与区别(面试题)

InnoDB和MyISAM是两种常见的MySQL数据库引擎,它们有一些联系和区别

  • 联系:
    • 1. 两者都是MySQL的存储引擎,用于管理数据库表的存储和检索
    • 2. 它们都支持基本的数据库功能,如索引、事务和锁
  • 区别:
    • 1. 事务支持:InnoDB是一个事务安全的存储引擎,支持ACID(原子性、一致性、隔离性和持久性)事务特性。而MyISAM不支持事务,只支持表级锁
    • 2. 锁定级别:InnoDB支持行级锁定,可以提供更好的并发性能和更高的并发处理能力。而MyISAM只支持表级锁定,可能在并发访问时引起锁冲突
    • 3. 数据完整性:InnoDB支持外键约束,可以确保数据的完整性。MyISAM不支持外键约束
    • 4. 数据缓存:InnoDB使用缓冲池来缓存数据和索引,提高读取性能。而MyISAM使用操作系统的文件系统缓存来缓存数据,性能较低
    • 5. 表空间:InnoDB的表空间文件包含数据和索引,使用独立的文件存储。而MyISAM的数据和索引存储在不同的文件中
    • 6. 崩溃恢复:InnoDB支持崩溃恢复,具有自动恢复和故障转移的能力。MyISAM不支持崩溃恢复,可能会导致数据丢失

选择使用InnoDB还是MyISAM取决于具体的需求。如果需要支持事务、并发性能和数据完整性,推荐使用InnoDB。如果对性能要求较低、不需要事务支持或需要全文搜索功能,可以考虑使用MyISAM。然而,需要注意的是,从MySQL 5.5版本开始,InnoDB成为了默认的存储引擎,并且在很多方面优于MyISAM

二.为什么要学习MySQL数据库引擎?

  • 1. 数据库引擎选择:了解不同的数据库引擎,可以根据应用需求选择合适的引擎。每个引擎都有自己的特点和适用场景,例如,InnoDB适合高并发和事务性应用,而MyISAM适合读取密集型应用。正确选择合适的引擎可以提高性能和数据完整性
  • 2. 性能调优:对不同的数据库引擎了解,可以针对性地进行性能调优和优化,以提高数据库的响应速度和吞吐量。不同的引擎在索引、缓存、并发控制等方面有不同的策略和机制,了解这些可以帮助针对性地优化数据库应用程序
  • 3. 数据库设计和开发:学习数据库引擎可以帮助你更好地设计和开发数据库应用。了解引擎的特点和限制有助于在设计数据模型和编写SQL查询时做出更好的决策,以获取更好的性能和数据一致性。此外,对于一些特定的功能和需求,了解引擎的特性可以帮助你选择更合适的解决方案
  • 4. 故障排除和维护:学习数据库引擎可以帮助你更好地理解数据库系统,并能更好地进行故障排除和维护工作。当数据库遇到问题时,熟悉引擎的工作原理和机制可以更快速且准确地定位和解决问题

⭐⭐总之,学习MySQL数据库引擎可以帮助我们成为一名更高效和专业的数据库开发人员或管理员,能够合理选择引擎、优化性能、进行数据库设计和开发,并能够更好地进行故障排除和维护工作

三.存储引擎查看

  • ​​​​​​​​​​​​​​查询存储引擎
    • --显示可用的数据库引擎和默认引擎
      show engines;
  • Support列的值表示某种引擎是否能使用​​​​​​​​​​​​​​

    • Support列值含义
      YES表示可以使用
      NO表示不能使用
      DEFAULT表示该引擎为当前默认的存储引擎
  • 查看默认引擎

    • --查看默认引擎
      SHOW VARIABLES LIKE 'default_storage_engine';
  • 创建表指定存储引擎

    • create table t_student(
      	sid int auto_increment primary key,
      	sname varchar(20),
      	sage int default 0
      ) engine=MyISAM;   --指定存储引擎,例如:MyISAM、InnoDB等等

四.SQL标准的四种隔离级别  

1.概念

①.读未提交(Read Uncommitted)

        在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)

②.读已提交(Read Committed)

        这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(NonrepeatableRead),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果

③.可重复读(Repeatable Read):

        这是MySQL的默认事务隔离级别,同一事务的多个实例在并发读取数据时,会看到同样的数据。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。

④.可串行化(Serializable)

        这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争

2.事务隔离级别问题

  • ①脏读

    • 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据
      •  T2时刻,事务B把原来张三的成绩由原数据80改为了70,此后又被T3时刻的事务A读取到了,但是T4时刻事务B发生异常,进行了回滚操作。这个过程,我们称70为脏数据,事务A进行了一次脏读
  • ②幻读

    • 幻读是指当事务不独立执行时,插入或者删除另一个事务当前影响的数据而发生的一种类似幻觉的现象。举个例子,某事务在检查表中的数据数count时,是10,过一段时间之后再查是11,这就发生了幻读,之前的检测获取到的数据如同幻觉一样
      • 事务B向表中新插入了一条数据,事务A在T3时刻后查询数据的时候,突然发现数据和以前查询的时候多出了一项,像产生了幻觉一样   
  • ③不可重复读

    • 不可重复读,有时候也会说成“读已提交”。什么意思呢,就是在一个事务内,多次读取同一个数据,却返回了不同的结果。实际上,这是因为在该事务间隔读取数据的期间,有其他事务对这段数据进行了修改,并且已经提交,就会发生不可重复读事故
      • 图示中事务A在T1和T4查询同一语句,却得到了不同的结果,这是因为T2~T3时刻事务B对该数据进行了修改,并提交。这个过程,出现了在一个事务内两次读到的数据却是不一样的,我们称为是不可重复读
  • 💡💡​​​​​​​​​​​​​​辉辉小贴士:三者间的区别

    • 脏读和不可重复读的区别:前者是“读已提交”,后者是“读未提交”

    • 幻读和不可重复读的区别:出现幻读和不可重复读的原因很像,都是在多次操作数据的时候发现结果和原来的不一样了,出现了其他事务干扰的现象。但是,幻读的偏重点是添加和删除数据,多次操作数据得到的记录数不一样;不可重复读的偏重点是修改数据,多次读取数据发现数据的值不一样了​​​​​​

五.ACID事务是什么 

ACID是数据库管理系统(DBMS)中保证事务的可靠性和一致性的一组特性,包括:

  • 1. 原子性(Atomicity):事务被视为一个不可分割的原子操作单元。它要么完全执行,要么完全回滚。如果事务中的任何一部分操作失败,整个事务都将被回滚到最初的状态,保持数据的一致性
  • 2. 一致性(Consistency):事务在执行前后,数据库从一个合法的一致状态转换为另一个合法的一致状态。这意味着事务在执行期间必须遵循所有的约束和规范,以保持数据的完整性和一致性
  • 3. 隔离性(Isolation):并发执行的多个事务之间应该相互隔离,使得每个事务在执行期间感知不到其他事务的存在。事务的隔离性防止了并发执行时的一些问题,如脏读、幻读和不可重复读
  • 4. 持久性(Durability):一旦事务提交成功,其对数据库的更新将永久保存,并且即使在系统故障或重启后也能保持。保证数据的持久性是通过将事务日志写入稳定存储介质来实现的

⭐⭐ACID事务的目标是确保数据库中数据的可靠性和一致性。通过这些特性,ACID事务提供了一种可靠的方式来处理并发访问数据库的情况,确保数据在多个并发操作下的正确性和完整性。这使得应用程序能够以一致和可靠的方式处理事务,同时保护数据库的数据完整性

           好啦,今天的分享就到这了,希望能够帮到你呢!😊😊                  

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是辉辉啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值