(一)万字长文系列,redolog看这篇就够了 —— redolog的作用?写入方式是什么?什么是日志文件组?redolog的写入策略是怎样的?

导语

MySQL是一种广泛使用的开源关系型数据库管理系统,由瑞典公司MySQL AB开发,现由Oracle公司维护。它以其高性能、可靠性和易用性而著称,广泛应用于各种Web应用程序。MySQL支持多种操作系统,包括Windows、Linux和macOS,且兼容多种编程语言,如PHP、Java和Python。其主要特点包括支持多用户访问、强大的数据安全性和灵活的存储引擎选择。MySQL采用了结构化查询语言(SQL)进行数据库操作,具有丰富的功能,如事务处理、外键支持和全文索引,是构建动态网站和应用程序的理想选择。

在这里插入图片描述

MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)和事务日志 redo log(重做日志)和 undo log(回滚日志)。

redo log

顾名思义,Redo Log(重做日志)指的是在数据库出现意外情况时,能够重新执行某种操作以恢复数据。在 MySQL 中,事务中修改的任何数据,都会将最新的数据写入 Redo Log 中进行备份。

随着事务操作的执行,Redo Log 日志会不断产生。在事务提交时,Redo Log 会被写入 Redo Buffer。但 Redo Buffer 并不会随着事务提交立即写入磁盘,而是等到事务操作的脏页写入磁盘之后,Redo Log 的使命才算完成。此时,Redo Log 日志占用的空间可以被后续产生的日志覆盖和重新利用。

Redo Log 是 InnoDB 存储引擎独有的,它赋予了 MySQL 崩溃恢复的能力,保证了事务的持久性。

redo log的作用

Redo Log 用来记录数据页的更改,以便在数据库崩溃或异常关闭时,通过重做 Redo Log 中的操作来恢复未完成的事务并保证数据的一致性。

例如,当 MySQL 实例挂掉或宕机时,重启后,InnoDB 存储引擎会使用 Redo Log 恢复数据,确保数据的持久性与完整性。

  • Redo 日志文件是 InnoDB 特有的,它是存储引擎级别的,不是 MySQL 级别的。
  • 服务器宕机,MySQL 重启时,利用 Redo Log 日志内容恢复缓冲区数据。
  • 一般情况下,Redo Log Buffer 数据写入磁盘的策略是立即刷入磁盘。

在这里插入图片描述

Buffer Pool是什么?

MySQL 的数据存储在磁盘中。当需要更新一条记录时,InnoDB 引擎会先在内存中进行更新(同时将该页标记为脏页),然后将本次对这个页的修改以 redo log 的形式记录下来,此时更新操作就算完成了。

随后,InnoDB 引擎会在适当的时候,由后台线程将缓存在 Buffer Pool 中的脏页刷新到磁盘里,这就是 WAL(Write-Ahead Logging) 技术。

WAL 技术指的是,MySQL 的写操作并不是立刻写到磁盘上,而是先写日志,然后在合适的时间再写到磁盘上。

Buffer Pool 的作用

  1. 读取数据:当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。这减少了磁盘 I/O 操作,提高了读取性能。
  2. 修改数据:当修改数据时,如果数据存在于 Buffer Pool 中,就直接修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页(该页的内存数据和磁盘上的数据已经不一致)。为了减少磁盘 I/O,不会立即将脏页写入磁盘,而是由后台线程在合适的时机将脏页写入磁盘。

工作机制

  • 数据读取:首先从 Buffer Pool 中查找数据,如果命中则直接返回。如果未命中,则从磁盘加载数据页到 Buffer Pool 中,再返回数据。
  • 数据修改:修改操作首先在 Buffer Pool 中进行,同时将修改记录到 redo log。修改的数据页被标记为脏页。后台线程会在适当的时候将这些脏页刷新到磁盘。

这种机制有效地减少了磁盘 I/O 操作,提高了数据库的整体性能。

redo log的写入方式

在 MySQL 中,数据是以页为单位存储的。当你查询一条记录时,会从硬盘中加载一页数据,这些数据被称为数据页,并放入到 Buffer Pool 中。

后续的查询操作首先会在 Buffer Pool 中查找数据,如果没有命中再去硬盘加载,从而减少硬盘 IO 开销,提升性能。

更新表数据时也是如此。如果 Buffer Pool 中存在要更新的数据,就直接在 Buffer Pool 中进行更新。同时,将“在某个数据页上做了什么修改”记录到 Redo Log Buffer 中,然后刷盘到 Redo Log 文件中。

在这里插入图片描述

理想情况下,事务一提交就会进行刷盘操作,但实际上,刷盘的时机是根据具体策略来决定的。

小贴士:每条 Redo 记录由“表空间号 + 数据页号 + 偏移量 + 修改数据长度 + 具体修改的数据”组成。

redo log 包括两部分内容:

  • 日志缓冲(redo log buffer):位于内存中。
  • 日志文件(redo log file):位于磁盘上。

每当 MySQL 执行一条 DML 语句时,首先会把记录写入 redo log buffer,然后在某个时间点将多个操作记录一次性写入 redo log file。这种先写日志,再写磁盘的技术,就是 WAL(Write-Ahead Logging)

在计算机操作系统中,用户空间(user space)下的缓冲区数据,一般是无法直接写入磁盘的,必须经过操作系统内核空间缓冲区(即 OS Buffer)。

  1. 日志最开始会写入位于存储引擎 InnoDB 的 redo log buffer,这个是在用户空间完成的。
  2. 然后再将日志保存到操作系统内核空间的缓冲区(OS buffer)中。
  3. 最后,通过系统调用 fsync(),从 OS buffer 写入到磁盘上的 redo log file 中,完成写入操作。这个写入磁盘的操作,就叫做 刷盘

在这里插入图片描述

redo log日志文件组

在 MySQL 中,redo log 日志文件并不是单独存在的,而是以日志文件组的形式出现。每个 redo 日志文件的大小都是相同的。

InnoDB 存储引擎有 1 个重做日志文件组( redo log Group)

重做日志组采用 循环写 的方式工作。

  • Write Pos 是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到 0 号文件开头;
  • CheckPoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数 据文件;

Write Pos 和 CheckPoint之间还空着的部分,可以用来记录新的操作。如果 Write Pos 追上 CheckPoint,表示已经写满,此时就需要向后移动CheckPoint来擦除数据。

每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组至少有2个重做日志文件,默认为ib_logfile0和ib_logfile1 。

可以在MySQL中通过如下命令来查看控制Redo Log的参数。

show variables like '%innodb_log%';

InnoDB存储引擎会先写 ib_logfile0 文件,当 ib_logfile0 文件被写满的时候,会切换至 ib_logfile1 文件,当 ib_logfile1 文件也被写满时,会切换回 ib_logfile0 文件。

我们知道 redo log 是为了防止 Buffer Pool 中的脏页丢失而设计的,那么如果随着系统运行,Buffer Pool 的脏页刷新到了磁盘中,那么 redo log 对应的记录也就没用了,这时候我们擦除这些旧记录,以腾出空间记录新的更新操作。

例如,可以配置一个包含 4 个文件的日志文件组,每个文件的大小为 1GB,这样整个 redo log 日志文件组可以记录 4GB 的内容。

在这里插入图片描述

日志文件组采用环形数组的形式进行存储,从头开始写,写到末尾后又回到头部继续写,如下图所示:

在这里插入图片描述

如果 write pos 追上了 checkpoint,这表示日志文件组已经满了,此时不能再写入新的 redo log 记录。MySQL 必须停下来,清空一些记录,并将 checkpoint 推进,以便腾出空间。

在这里插入图片描述

在 MySQL 8.0.30 之前,可以通过 innodb_log_files_in_groupinnodb_log_file_size 配置日志文件组的文件数量和文件大小。然而,在 MySQL 8.0.30 及之后的版本中,这两个变量已被废弃,即使指定了它们,也只是用来计算 innodb_redo_log_capacity 的值。而日志文件组的文件数量固定为 32,文件大小为 innodb_redo_log_capacity / 32

在使用 MySQL 8.0.30 及之后的版本时,推荐使用 innodb_redo_log_capacity 变量来配置日志文件组。

Redo Log 的刷盘时机

InnoDB 在多种情况下会刷新重做日志(Redo Log),以保证数据的持久性和一致性。以下是 InnoDB 刷新重做日志的主要时机:

  1. 事务提交
    当事务提交时,log buffer 中的 redo log 会被刷新到磁盘。这可以通过参数 innodb_flush_log_at_trx_commit 来控制,具体细节将在后文提到。

  2. log buffer 空间不足
    当 log buffer 中缓存的 redo log 占满了 log buffer 总容量的大约一半时,需要将这些日志刷新到磁盘。

  3. 事务日志缓冲区满
    InnoDB 使用一个事务日志缓冲区(transaction log buffer)来暂时存储事务的重做日志条目。当缓冲区满时,会触发日志刷新,将日志写入磁盘。

  4. Checkpoint(检查点)
    InnoDB 定期执行检查点操作,将内存中的脏数据(已修改但尚未写入磁盘的数据)刷新到磁盘,并将相应的重做日志一同刷新,以确保数据的一致性。

  5. 后台刷新线程
    InnoDB 启动了一个后台线程,负责周期性(每隔 1 秒)地将脏页(已修改但尚未写入磁盘的数据页)刷新到磁盘,并将相关的重做日志一同刷新。

  6. 正常关闭服务器
    当 MySQL 服务器正常关闭时,redo log 会被刷新到磁盘,以确保所有未持久化的数据都被写入磁盘。

  7. 后台线程主动刷盘
    redo log buffer 占用的空间接近 innodb_log_buffer_size 一半时,后台线程也会主动刷盘。

通过这些机制,InnoDB 确保了重做日志的及时刷新,从而保证了数据的持久性和一致性。

刷盘策略

在 MySQL 中,设置正确的刷盘策略 innodb_flush_log_at_trx_commit 是至关重要的。根据不同的刷盘策略配置,MySQL 宕机后可能会存在轻微的数据丢失问题。

innodb_flush_log_at_trx_commit 参数有三种取值,对应三种刷盘策略:

  • 0 - 延迟写:事务提交时不会将 redo log buffer 中的日志写入到 OS buffer,而是每秒写入 OS buffer 并调用写入到 redo log file 中。
  • 1 - 实时写:事务每次提交都会将 redo log buffer 中的日志写入 OS buffer 并保存到 redo log file 中。
  • 2 - 实时写,延迟刷:每次事务提交写入到 OS buffer,然后每秒将日志写入到 redo log file。

0:不进行刷盘
事务提交时不会将 redo log buffer 中的日志写入到 OS buffer,而是每秒写入 OS buffer 并调用写入到 redo log file 中。这种方式性能最高,但最不安全,因为如果 MySQL 挂了或宕机了,可能会丢失最近 1 秒内的事务。

在这里插入图片描述

1:每次都进行刷盘
事务每次提交都会将 redo log buffer 中的日志写入 OS buffer 并保存到 redo log file 中。这种方式性能最低,但最安全,因为只要事务提交成功,redo log 记录就一定在磁盘里,不会有任何数据丢失。默认值为 1。为了保证事务的持久性,建议将其设置为 1。另外,InnoDB 存储引擎有一个后台线程,每隔 1 秒会将 redo log buffer 中的内容写到文件系统缓存(page cache),然后调用 fsync 刷盘。即使事务未提交,这些 redo log 记录也可能会被刷盘。

在这里插入图片描述

2:放入缓存,系统决定刷盘时机
每次事务提交时只将 log buffer 中的 redo log 内容写入 page cache(文件系统缓存)。这种方式的性能和安全性介于前两者之间。只要事务提交成功,redo log buffer 中的内容会写入文件系统缓存。如果仅仅是 MySQL 挂了,不会有任何数据丢失,但如果宕机,可能会有 1 秒的数据丢失。一般建议选择取值 2,因为 MySQL 挂了数据没有损失,整个服务器挂了才会损失 1 秒的事务提交数据。

在这里插入图片描述

  • 0:不进行刷盘
    性能最高,但最不安全,可能会丢失最近 1 秒内的事务。
  • 1:每次都进行刷盘
    性能最低,但最安全,事务提交成功后 redo log 记录一定在磁盘里,不会有任何数据丢失。
  • 2:放入缓存,系统决定刷盘时机
    性能和安全性介于前两者之间,MySQL 挂了不会有数据丢失,但服务器宕机会损失 1 秒的数据。

如果 redo log Buffer 刷入磁盘后,数据库服务器宕机了,在下次重启的时候 MySQL 也会将 redo 日志文件内容恢复到 Buffer Pool 中,因为 redo log buffer 中的数据已经被写入到磁盘了,已经被持久化了。

Redis 的持久化机制类似,在 Redis 启动的时候会检查 rdb 或者是 aof 或者是两者都检查,根据持久化的文件来将数据恢复到内存中。

为什么要用redolog

在数据库系统中,数据的持久性和一致性是至关重要的。Redo Log 的引入正是为了确保这些目标的实现。以下是详细解释:

数据丢失问题

假设我们进行了一个修改数据的操作,数据修改后将数据缓存到 Buffer Pool 中。如果此时 MySQL 突然故障宕机,内存中的数据就会丢失,导致数据无法持久化到磁盘上。

在进行修改操作时,InnoDB 引擎会先更新内存(同时标记为脏页),然后将本次对这个页的修改以 Redo Log 的形式记录下来。当 MySQL 宕机后,再次恢复正常时,我们可以通过执行 Redo Log 中的操作来重新进行原来的修改操作。

Redo Log 能够实现事务的持久性,防止在发生故障时,有脏页未写入表的 ibd 文件中。在重启 MySQL 服务时,根据 Redo Log 进行重做,从而将未提交的事务进行持久化。这个过程可以简化为下图所示。

在这里插入图片描述

相信大家都知道 redo log 的作用以及它的刷盘时机和存储形式。

现在我们来思考一个问题:为什么不每次直接把修改后的数据页刷盘,而是要使用 redo log 呢?

  1. 数据页大小与修改数据量不匹配
    数据页的大小是 16KB,刷盘操作比较耗时。而在许多情况下,修改的数据量可能只有几 Byte,这时候将整个数据页刷盘显得非常不划算。

  2. 随机写操作性能差
    数据页刷盘是随机写操作,因为每个数据页在硬盘上的位置是随机的,这导致性能非常差。

  3. Redo Log 的优势

    • 小而高效:一行记录可能只占几十 Byte,只包含表空间号、数据页号、磁盘文件偏移量和更新值。
    • 顺序写操作:Redo Log 是顺序写操作,因此刷盘速度非常快。

使用 Redo Log 记录修改内容,性能会远远超过直接刷数据页的方式,这也让数据库的并发能力更强。

MySQL 为了提高效率,先从磁盘读取数据放在内存中进行操作,然后在某个时机将其持久化到磁盘中。除了从磁盘中加载文件和将操作前的记录保存到 undo 日志文件中,其他的操作是在内存中完成的。

如果此时 MySQL 所在的服务器宕机了,那么 Buffer Pool 中的数据会全部丢失的。这个时候就需要 Redo 日志文件来恢复数据。

内存中的数据页在一定时机也会刷盘,我们称之为页合并。

Redo Log 的引入主要是为了提高数据库系统的性能和可靠性:

  • 性能:通过顺序写操作和小数据量的写入,Redo Log 显著提升了写操作的效率。
  • 可靠性:在系统故障时,Redo Log 确保了数据的持久性和一致性。

通过这些机制,MySQL 能够在高效处理事务的同时,确保数据的安全和完整。

mysql服务器宕机,缓冲区的数据会怎么样

在 MySQL 服务器宕机的情况下,缓冲区(Buffer Pool)中的数据会受到不同程度的影响,具体取决于数据的持久化状态。以下是详细的分析:

Redo Log 持久化前

  • 事务失败:如果 Redo Log 尚未持久化到磁盘,那么 MySQL 会认为本次事务失败。
  • Undo Log 恢复:利用 Undo Log 日志,MySQL 会将数据恢复到更新前的状态。这是因为 Undo Log 记录了数据在更新前的原始状态。

Redo Log 持久化后

  • 事务成功:如果 Redo Log 已经持久化到磁盘,那么即使 MySQL 服务器宕机,数据修改也被认为是成功的。
  • 重启恢复:在 MySQL 下次重启时,系统会自动将 Redo Log 文件中的内容恢复到缓冲区(Buffer Pool)中。这一过程确保了数据的持久性和一致性。

以下是更新过程的详细图示和步骤:

在这里插入图片描述

截至目前,我们应该都熟悉了 MySQL 的执行器调用存储引擎是怎么将一条 SQL 加载到缓冲池和记录哪些日志的,流程如下:

  1. 准备更新一条 SQL 语句
  2. MySQL(innodb)会先去缓冲池(BufferPool)中去查找这条数据,没找到就会去磁盘中查找,如果查找到就会将这条数据加载到缓冲池(BufferPool)中
  3. 在加载到 Buffer Pool 的同时,会将这条数据的原始记录保存到 undo 日志文件中
  4. innodb 会在 Buffer Pool 中执行更新操作,更新后的数据会记录在 redo log buffer 中
  5. 将 redo log buffer 中的数据写入到 redo log 磁盘文件中(innodb_flush_log_at_trx_commit 参数决定)
  6. 提交事务,数据修改永久保存到数据库

调用redolog的全过程

到此为止,从执行器开始调用存储引擎接口做了哪些事情呢

从执行器开始调用存储引擎接口的全过程如下:

  1. 准备更新:准备执行一条 SQL 更新语句。
  2. 查找数据:MySQL(InnoDB 引擎)会先在缓冲池(Buffer Pool)中查找这条数据。如果缓冲池中没有找到,则会从磁盘中查找,并将数据加载到缓冲池中。
  3. 保存原始记录:在加载到缓冲池的同时,会将这条数据的原始记录保存到 Undo 日志文件中。
  4. 执行更新:InnoDB 在缓冲池中执行更新操作,更新后的数据会记录在 Redo Log Buffer 中。
  5. 写入 Redo Log:MySQL 提交事务时,会将 Redo Log Buffer 中的数据写入到 Redo 日志文件中。
  6. 刷盘策略:刷磁盘可以通过 innodb_flush_log_at_trx_commit 参数来设置刷盘策略。
  7. 重启恢复:MySQL 宕机重启时,会将 Redo 日志恢复到缓冲池中。

有关redolog的问题解答

1. 什么是WAL技术, 好处是什么.

  • WAL,中文全称是Write-Ahead Logging,它的关键点就是日志先写内存,再写磁盘。MySQL执行更新操作后,在真正把数据写入到磁盘前,先记录日志
  • 好处是不用每一次操作都实时把数据写盘,就算crash后也可以通过redo log恢复,所以能够实现快速响应SQL语句。

2. redo log 为什么可以保证crash safe机制呢?

Crash safe(崩溃安全)是指系统在发生崩溃(如电源故障、硬件故障、软件错误等)后,能够恢复到一致且正确的状态的能力。

  • 因为redo log每次更新操作完成后,就一定会写入的,如果写入失败,说明此次操作失败,事务也不可能提交。
  • redo log内部结构是基于页的,记录了这个页的字段值变化,只要crash后读取redo log进行重放,就可以恢复数据。

在这里插入图片描述

感谢大家的观看!!!创作不易,如果觉得我写的好的话麻烦点点赞👍支持一下,谢谢!!!
相关文章已在掘金发布,体验更佳!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka Producer发送消息流程之分区器和数据收集器

文章目录 1. Partitioner分区器2. 自定义分区器3. RecordAccumulator数据收集器 1. Partitioner分区器 clients/src/main/java/org/apache/kafka/clients/producer/KafkaProducer.java,中doSend方法,记录了生产者将消息发送的流程,其中有一步…

【自动化测试】几种常见的自动化测试框架

在软件测试领域,自动化测试框架有很多,这里主要介绍几种常用的自动化测试框架。 1.pytest pytest 是 Python 的一种单元测试框架,与 Python 自带的 unittest 测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高…

UDP详细总结

UDP协议特点 UDP是无连接的传输层协议; UDP使用尽最大努力交付,不保证可靠交付; UDP是面向报文的,对应用层交下来的报文,不合并,不拆分,保留原报文的边界; UDP没有拥塞控制&#…

[集成学习]基于python的Stacking分类模型的客户购买意愿分类预测

1 导入必要的库 import pandas as pd import numpy as np import missingno as msno import matplotlib.pyplot as plt from matplotlib import rcParams import seaborn as sns from sklearn.metrics import roc_curve, auc from sklearn.linear_model import LogisticRegres…

【C#】计算两条直线的交点坐标

问题描述 计算两条直线的交点坐标,可以理解为给定坐标P1、P2、P3、P4,形成两条线,返回这两条直线的交点坐标? 注意区分:这两条线是否垂直、是否平行。 代码实现 斜率解释 斜率是数学中的一个概念,特别是…

改变你对文本生成程序的误解!用C++标准库,MinGW情况下,写一个文本生成器(一种AI)

声明:我这个不是那种“文本生成器” 我之前见过那种“自动写作文”的程序,无非就是这样的文章: 文章写的只有主题,没有内容 我曾多次向我的朋友提问他们看没看过那种AI写作的代码,而给我的回复很简单:你弄那玩楞干哈?装*?那玩楞我见过,写的文章空有其表,没有其实;…

Java并发04之线程同步机制

文章目录 1 线程安全1.1 线程安全的变量1.2 Spring Bean1.3 如果保证线程安全 2 synchronized关键字2.1 Java对象头2.1.1 对象组成部分2.1.2 锁类型2.1.3 锁对象 2.2 synchronized底层实现2.2.1 无锁状态2.2.2 偏向锁状态2.2.3 轻量级锁状态2.2.4 重量级锁2.2.5 锁类型总结2.2.…

windows USB 设备驱动开发-编写 UCSI 客户端驱动程序

编写 UCSI 客户端驱动程序 USB Type-C 连接or 系统软件接口(UCSI)驱动程序充当带有嵌入式控制器(EC)的 USB Type-C 系统的控制器驱动程序。 如果实现平台策略管理器(PPM)的系统,如 UCSI 规范中…

国产化低功耗HDMI转VGA方案,大量出货产品,广泛应用在显示器以及广告机产品

芯片描述: 兼具高性能和低成本效益的优点,是一款可以将高清视频 HDMI1.4 数字信号转换成 VGA 模拟信号输出的芯片。不需要提供外部电源,ICNM7301 就可以在正常模式下使用;ICNM7301 广 泛适用于各种市场系统和显示应用体系&#x…

LabVIEW异步和同步通信详细分析及比较

1. 基本原理 异步通信: 原理:异步通信(Asynchronous Communication)是一种数据传输方式,其中数据发送和接收操作在独立的时间进行,不需要在特定时刻对齐。发送方在任何时刻可以发送数据,而接收…

2024年广东省安全员B证第四批(项目负责人)证模拟考试题库及广东省安全员B证第四批(项目负责人)理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年广东省安全员B证第四批(项目负责人)证模拟考试题库及广东省安全员B证第四批(项目负责人)理论考试试题是由安全生产模拟考试一点通提供,广东省安全员B证…

手持式气象站:便携科技,掌握微观气象的利器

手持式气象站,顾名思义,是一种可以随身携带的气象监测设备。它小巧轻便,通常配备有温度、湿度、风速、风向、气压等多种传感器,能够实时测量并显示各种气象参数。不仅如此,它还具有数据存储、数据传输、远程控制等多种…

kafka开启kerberos和ACL

作者:恩慈 一、部署kafka-KB包 1.上传软件包 依次点击 部署中心----部署组件----上传软件包 选择需要升级的kafka版本并点击确定 2.部署kafka 依次点击部署中心----部署组件----物理/虚拟机部署----选择集群----下一步 选择手动部署-…

MongoDB自学笔记(四)

一、前文回顾 上一篇文章中我们学习了MongoDB中的更新方法&#xff0c;也学了一部分操作符。今天我们将学习最后一个操作“删除”。 二、删除 原始数据如下&#xff1a; 1、deleteOne 语法&#xff1a;db.collection.deleteOne(< query >,< options >) 具体参…

学生信息管理系统-可视化-科目管理CRUD代码生成器

学生管理系统中的科目管理是一个重要的组成部分&#xff0c;它负责维护和管理学校中所有的教学科目信息。 可视化快速界面生成CRUD界面&#xff0c;API通过代码生成器生成器生成。 新增数据库表 拷贝demo_table修改为clazz_kemu表 修改表结构 其中包括一个自增ID字段&#x…

在虚拟机 CentOS7 环境下安装 MySQL5.7 数据库

配置目标 在虚拟机的 Linux CentOS7 环境下安装 MySQL5.7 版数据库&#xff0c;并能从宿主机 Windows 系统连接该数据库&#xff08;默认端口&#xff1a;3306&#xff09;。 1. 准备工作 WMware 虚拟机&#xff1a;VMware Workstation 16 ProCentOS7 镜像&#xff1a;CentO…

Java面试题--JVM大厂篇之深入解析JVM中的Serial GC:工作原理与代际区别

目录 引言&#xff1a; 正文&#xff1a; 一、Serial GC工作原理 年轻代垃圾回收&#xff08;Minor GC&#xff09;&#xff1a; 老年代垃圾回收&#xff08;Major GC或Full GC&#xff09;&#xff1a; 二、年轻代和老年代的区别 年轻代&#xff08;Young Generation&a…

redis其他类型和配置文件

很多博客只讲了五大基本类型&#xff0c;确实&#xff0c;是最常用的&#xff0c;而且百分之九十的程序员对于Redis只限于了解String这种最常用的。但是我个人认为&#xff0c;既然Redis官方提供了其他的数据类型&#xff0c;肯定是有相应的考量的&#xff0c;在某些特殊的业务…

【C++】——new和delete

文章目录 热身试题C中的内存管理new与delete对于内置类型的操作new与delete对于自定义类型的操作 malloc/free和new/delete的区别 热身试题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3…

嵌入式物联网在教育行业的应用——案例分析

作者主页: 知孤云出岫 嵌入式物联网在教育行业的应用——案例分析 目录 作者主页:嵌入式物联网在教育行业的应用——案例分析一、引言二、智能教室&#xff1a;环境监测系统1. 硬件需求2. 电路连接3. 代码实现 三、个性化学习&#xff1a;智能学习平台1. 数据处理与分析2. 代…