【面试题】MySQL(第一篇)

1. MySQL是什么?

MySQL是一种开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据管理。MySQL具有高性能、可靠性、可扩展性和兼容性等特点,广泛应用于Web应用开发中。

2. MySQL中的数据类型有哪些?

MySQL支持多种数据类型,包括整数类型(如INT、BIGINT)、浮点数和定点数类型(如FLOAT、DOUBLE、DECIMAL)、字符串类型(如VARCHAR、CHAR、TEXT)、日期和时间类型(如DATE、TIME、DATETIME、TIMESTAMP)等。

3. 什么是MySQL中的事务?

MySQL中的事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这意味着事务内的操作要么全部成功,要么全部失败,以保持数据的一致性和完整性。

4.详细介绍事务的四个特性

1. 原子性(Atomicity)

定义:事务的原子性指的是事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。如果事务中的某个操作失败,则整个事务会回滚到事务开始前的状态,就像事务从未执行过一样。

作用:原子性保证了数据库的一致性和完整性,避免了因部分操作成功而导致的数据不一致问题。

示例:在转账过程中,如果从一个账户扣除金额的操作成功,但向另一个账户增加金额的操作失败,那么整个转账事务会被回滚,两个账户的金额都不会发生变化。

2. 一致性(Consistency)

定义:事务的一致性指的是事务执行前后,数据库的状态必须保持一致。这意味着事务的执行结果必须满足所有的完整性约束,包括外键约束、主键约束、唯一性约束等。

作用:一致性确保了数据库的数据在事务执行前后都符合业务规则和数据约束,避免了数据错误和不一致的问题。

示例:在转账过程中,事务的一致性确保了转账前后两个账户的余额总和保持不变,同时满足账户余额不能为负等约束条件。

3. 隔离性(Isolation)

定义:事务的隔离性指的是并发执行的事务之间应该相互隔离,一个事务的执行不能被其他事务干扰。不同的隔离级别提供了不同程度的事务隔离,以防止并发事务之间的冲突和干扰。

作用:隔离性保证了并发事务的独立性,避免了脏读、不可重复读和幻读等并发问题。

隔离级别

  • 读未提交(Read Uncommitted):最低的隔离级别,允许事务读取未被其他事务提交的变更。这可能导致脏读问题。

  • 读已提交(Read Committed):一个事务只能读取到已经被其他事务提交的变更。这避免了脏读问题,但可能出现不可重复读问题。

  • 可重复读(Repeatable Read):MySQL的默认隔离级别。一个事务在整个执行过程中,多次读取同一数据的结果是一致的。这避免了脏读和不可重复读问题,但可能出现幻读问题。

  • 串行化(Serializable):最高的隔离级别,事务串行执行,避免了脏读、不可重复读和幻读问题。但事务的并发性能最低。

4. 持久性(Durability)

定义:事务的持久性指的是一旦事务被提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。

作用:持久性确保了事务的修改能够长期保存下来,不会因为系统故障而丢失数据。

实现方式:事务的持久性通常是通过将事务的修改记录到磁盘上的日志文件或数据文件中来实现的。这样,即使系统发生故障,也可以通过恢复日志文件或数据文件来恢复事务的修改。

综上所述,事务的四个特性(原子性、一致性、隔离性、持久性)共同保证了数据库在并发环境中的一致性和可靠性。

5. MySQL中的事务隔离级别有哪些?

MySQL支持四种事务隔离级别,分别是:

  • READ UNCOMMITTED(读未提交):允许事务读取未被其他事务提交的变更。

  • READ COMMITTED(读已提交):确保事务只能读取已经被其他事务提交的变更。

  • REPEATABLE READ(可重复读):保证在同一个事务内多次读取同样记录的结果是一致的。

  • SERIALIZABLE(可串行化):强制事务串行执行,以避免冲突。

6.脏读、幻读、不可重复读

1. 脏读(Dirty Read)

定义:脏读发生在一个事务读取了另一个事务未提交的数据时。由于这些数据可能会因为回滚而被撤销,因此读取到的数据是“脏”的,即不稳定的、不可靠的。

场景:事务A修改了一行数据,但尚未提交,此时事务B读取了事务A修改后的数据。如果事务A最终回滚,那么事务B读取到的数据就是无效的。

避免方式:将事务的隔离级别设置为读已提交(Read Committed)或更高,可以避免脏读的发生。

2. 不可重复读(Non-repeatable Read)

定义:不可重复读发生在一个事务内多次读取同一数据集合时,由于其他事务的并发更新,导致每次读取的数据可能不一致。

场景:事务A在两次查询之间,事务B对同一数据进行了修改并提交。当事务A再次查询时,发现数据已经改变,导致两次查询结果不一致。

避免方式:将事务的隔离级别设置为可重复读(Repeatable Read)或更高,可以避免不可重复读的发生。需要注意的是,MySQL的可重复读隔离级别通过多版本并发控制(MVCC)来避免不可重复读,但并不能完全避免幻读。

3. 幻读(Phantom Read)

定义:幻读发生在当一个事务重新执行一个查询时,由于其他事务的并发插入操作,导致查询结果中出现了新的行(即“幻影”行)。

场景:事务A在两次查询之间,事务B向查询范围中插入了新的行并提交。当事务A再次执行相同的查询时,会发现新的行,即查询结果集发生了变化。

避免方式:将事务的隔离级别设置为串行化(Serializable),可以避免幻读的发生。然而,串行化会极大地降低并发性能,因为事务只能串行执行。在MySQL中,即使使用可重复读隔离级别,通过索引锁定等技术也可以在一定程度上避免幻读,但这并不是完全可靠的。

总结来说,脏读、不可重复读和幻读是数据库并发事务中可能遇到的问题,它们与事务的隔离级别密切相关。通过选择合适的隔离级别,可以在保证数据一致性和完整性的同时,尽量提高数据库的并发性能。

7.MySQL中的MVCC机制

MySQL中的MVCC(Multi-Version Concurrency Control,多版本并发控制)机制是一种用于提高数据库并发性能的技术,它通过维护数据的多个版本来实现事务的隔离性,从而允许读写操作同时进行,而无需加锁。

一、MVCC的作用

  1. 提高数据库的并发性能:通过无锁的方式处理读写冲突,使得读操作不会阻塞写操作,写操作也不会阻塞读操作,从而大大提高了数据库的并发性能。

  2. 降低死锁的风险:由于无需使用显式锁来进行并发控制,MVCC机制可以在很大程度上降低死锁的风险。

  3. 实现事务的隔离性:MVCC机制通过维护数据的多个版本来保证事务的隔离性,使得在同一事务内多次查询返回的结果是一致的。

二、MVCC的实现原理

MVCC机制在MySQL中主要通过以下三个组件来实现:

  1. Undo Log(回滚日志):

    • 作用:记录数据修改前的版本信息,用于事务回滚和数据恢复。

    • 类型:包括插入(Insert)Undo Log和更新(Update)Undo Log。插入Undo Log在事务提交后可直接删除,而更新Undo Log需要等待purge线程进行最终的删除。

    • 版本链:多个事务对同一行记录进行更新会产生多个历史版本,这些版本通过回滚指针(roll_pointer)串联起来,形成Undo Log版本链。

  2. Read View(一致性视图):

    • 生成时机:在事务执行快照读(如简单的SELECT查询)时生成,用于判断数据的可见性。

    • 组成:包括创建Read View时所有未提交事务的ID数组(min_trx_id表示最小ID,m_ids表示事务ID数组)、已提交的最大事务ID(max_trx_id)以及创建Read View的事务ID(creator_trx_id)。

    • 作用:根据Read View中的信息,结合Undo Log版本链,判断哪些版本的数据对当前事务可见。

  3. 隐藏字段:

    • DB_TRX_ID:6字节的事务ID,用于记录每次事务对聚簇记录进行修改时的事务ID。

    • DB_ROLL_PTR:7字节的回滚指针,指向对应某行记录的上一个版本,在Undo Log中使用。

    • DB_ROW_ID:6字节的隐藏主键,如果表中没有主键,InnoDB会自动生成单调递增的隐藏主键。

三、MVCC的可见性判断规则

当查询一条数据时,系统会按照以下规则判断数据的可见性:

  1. 如果当前Undo Log的版本的trx_id < Read View的min_trx_id,说明该版本对应的事务在生成Read View之前已经提交,因此该版本的数据对当前事务可见。

  2. 如果当前Undo Log的版本的trx_id ≥ Read View的max_trx_id,说明该版本对应的事务在生成Read View之后才开始,因此该版本的数据对当前事务不可见。

  3. 如果当前Undo Log的版本的trx_id在[min_trx_id, max_trx_id)范围内,则需要进一步判断:

    • 如果trx_id在m_ids中,说明版本对应的事务未提交,因此该版本的数据对当前事务不可见。

    • 如果trx_id不在m_ids中,说明版本对应的事务已经提交,因此该版本的数据对当前事务可见。

四、MVCC的应用场景

MVCC机制在MySQL中主要用于实现快照读(Snapshot Read),即读取数据的某个历史版本,而不是最新版本。快照读在默认情况下不会加锁,因此可以大大提高数据库的并发性能。而当前读(Current Read)则是一种加锁的操作,会读取数据的最新版本,并对其进行加锁,以保证数据的一致性。

综上所述,MySQL中的MVCC机制是一种高效的并发控制机制,它通过维护数据的多个版本来实现事务的隔离性,从而允许读写操作同时进行,大大提高了数据库的并发性能。

8.MySQL中的锁

MySQL中的锁是用来管理对数据库中数据的并发访问的一种机制。根据不同的分类标准,MySQL中的锁可以分为多种类型。以下是一些主要的锁类型及其特点:

一、按锁定的粒度或范围分类

  1. 全局锁

    • 定义:对整个数据库实例加锁,限制除了超级用户外的所有查询和修改操作。

    • 使用场景:一般用于备份、恢复等操作。例如,使用FLUSH TABLES WITH READ LOCK命令可以开启全局锁,让整个数据库实例处于只读状态。

    • 注意:全局锁对数据库的并发性影响较大,因此在实际应用中应谨慎使用。

  2. 表锁

    • 定义:对整个表加锁,其他连接无法修改或读取(取决于锁的类型)该表的数据,但可以对其他表进行操作。

    • 类型:

      • 共享锁(S锁/读锁):允许多个事务同时读取同一个表的数据,但不允许修改。

      • 排他锁(X锁/写锁):只允许一个事务对表进行写操作,其他事务既不能读也不能写。

    • 使用场景:在MyISAM等不支持行级锁的存储引擎中,表锁是主要的锁机制。

  3. 行锁

    • 定义:对单个行加锁,只锁定需要修改的数据行,其他行可以被同时修改或读取。

    • 类型:

      • 记录锁(Record Lock):直接锁定索引记录。

      • 间隙锁(Gap Lock):锁定索引记录之间的间隙,防止其他事务插入数据。间隙锁的目的是在RR级别下,防止幻读,幻读的产生是当前事务多次的查询结果数量上不一致,间隙锁的目的就是保证当前范围内的数据不会被更改,所以它会锁住某些个区间的数据。

      • 临键锁(Next-Key Lock):记录锁和间隙锁的组合,锁定一个范围,并包含记录本身。

    • 使用场景:在InnoDB等支持行级锁的存储引擎中,行锁是提高并发性能的重要手段。

  4. 元数据锁(MDL)

    • 定义:锁定数据库对象的元数据,如表结构,用于保证数据定义的一致性。

    • 使用场景:在DDL操作(如ALTER TABLE)期间,会自动加MDL锁,防止DDL和DML操作之间的冲突。

二、按锁的模式分类

  1. 共享锁(Shared Lock, S锁)

    • 定义:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。

    • SQL语句SELECT ... LOCK IN SHARE MODE;

  2. 排他锁(Exclusive Lock, X锁)

    • 定义:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。

    • SQL语句SELECT ... FOR UPDATE;

三、其他锁

  1. 意向锁(Intention Lock)

    • 定义:表级锁,表明事务打算在表中的行上加排他锁或共享锁。分为意向共享锁(IS)和意向排他锁(IX)。

    • 作用:意向锁是InnoDB自动加的,无需人工干预,主要用于实现行锁和表锁之间的兼容。

  2. 乐观锁和悲观锁

    • 乐观锁:假设冲突不会发生,只在数据提交更新时检查是否有冲突。

    • 悲观锁:假设冲突总会发生,因此对数据加锁以防止冲突。

    • 注意:这两种锁并不是MySQL数据库本身的锁机制,而是并发控制的思想。

四、总结

MySQL中的锁类型繁多,包括全局锁、表锁、行锁、元数据锁等,每种锁都有其特定的使用场景和优缺点。在实际应用中,需要根据具体的业务需求和数据访问模式来选择合适的锁策略,以保证数据的一致性和并发性能。同时,还需要注意锁的粒度、锁冲突、死锁等问题,合理设计和管理锁可以提高数据库的并发性能。

9.MySQL中常见的存储引擎

MySQL中常见的存储引擎包括多种,每种存储引擎都有其特定的特点和适用场景。以下是一些常见的MySQL存储引擎及其特点:

1. InnoDB

  • 特点:

    • 支持事务处理(Transaction Processing):具有提交(COMMIT)和回滚(ROLLBACK)能力,能确保数据的完整性和一致性。

    • 支持行级锁定(Row-level Locking):与MyISAM的表级锁定相比,行级锁定可以大幅度提高多用户并发操作的性能。

    • 支持外键(Foreign Keys):外键约束保证了一个表中的数据必须满足另一个表里的参照完整性要求。

    • 支持崩溃恢复能力(Crash Recovery Capabilities):通过日志文件来恢复数据。

    • 支持MVCC(多版本并发控制):提高数据库的并发性能。

    • 适用于处理大量短期事务,是MySQL的默认存储引擎(从MySQL 5.5版本开始)。

  • 适用场景:

    • 需要事务支持的业务,如银行、金融等领域。

    • 高并发的读写操作。

    • 需要外键支持的场景。

2. MyISAM

  • 特点:

    • 不支持事务处理,也不支持行级锁和外键。

    • 访问速度快,对事务完整性没有要求。

    • 支持全文索引(FULLTEXT),适合进行全文搜索。

    • 表级锁定(Table-level Locking):在写操作时会锁定整个表,因此并发性能较低。

    • 数据文件和索引文件是分离的(.MYD用于存储数据,.MYI用于存储索引)。

  • 适用场景:

    • 读多写少的业务场景,如Web应用中的用户信息表。

    • 不需要事务支持,且主要进行SELECT、INSERT操作的场景。

3. MEMORY(HEAP)

  • 特点:

    • 使用内存中的数据来创建表,所有数据都存储在内存中,因此访问速度非常快。

    • 默认使用哈希索引,也可以指定使用B树索引。

    • 不支持事务处理和外键。

    • 表级锁定。

    • 服务器重启后数据会丢失,因此不适合存储重要数据。

  • 适用场景:

    • 临时数据存储,如缓存。

    • 频繁访问且数据量不大的场景。

4. Archive

  • 特点:

    • 专门用于存储归档数据,如日志信息。

    • 压缩存储空间,但不支持索引和事务。

    • 插入速度非常快,但查询性能较差。

  • 适用场景:

    • 归档数据的存储,如历史记录、日志等。

5. CSV

  • 特点:

    • 存储CSV格式的数据,适合导入和导出数据。

    • 不支持索引和事务。

  • 适用场景:

    • 需要将MySQL中的数据导出为CSV格式,或者从CSV文件导入数据的场景。

6. NDB Cluster(MySQL Cluster)

  • 特点:

    • 基于共享存储的集群存储引擎,支持高可用性和高性能的数据存储。

    • 适用于需要高可用性和高并发性的分布式数据库应用。

  • 适用场景:

    • 分布式数据库系统,如需要跨多个服务器节点共享数据的场景。

7. Federated

  • 特点:

    • 允许将数据存储在远程MySQL服务器上,实现分布式数据库应用。

  • 适用场景:

    • 需要跨多个MySQL服务器节点进行数据访问和管理的场景。

总结

MySQL提供了多种存储引擎,每种存储引擎都有其独特的特性和适用场景。在选择存储引擎时,需要根据具体的应用需求、数据特性以及性能要求来综合考虑。同时,需要注意的是,MySQL的不同版本支持的存储引擎可能会有所不同,因此在选择存储引擎时还需要考虑MySQL的版本兼容性。

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

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

相关文章

数据分析入门指南Excel篇:各类Excel函数概览与详解(二)

在当今数字化时代&#xff0c;数据已成为推动业务决策和创新的关键因素。而表格结构数据&#xff0c;作为最常见的数据存储形式之一&#xff0c;广泛应用于财务、物流、电商等多个领域。本文将基于提供的材料文本&#xff0c;深入探讨表格数据的处理与分析&#xff0c;特别是通…

华为 eNSP 路由器 实现双wan出口 访问外网nat 策略路由配置

1 实验拓扑 2 路由器配置 #R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysn [Huawei]sysname R1 [R1]int GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]qu [R1…

基于STM32设计的智能台灯(HC05蓝牙控制)179

基于STM32设计的智能台灯(HC05蓝牙控制)(179) 文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要【5】项目背景1.4 开发…

详解Linux的shell脚本基础指令

一、shell简介 是Linux系统的用户界面&#xff0c;它提供用户与内核的一种交互方式。它接收用户输入的命令&#xff0c;并把它送入内核去执行&#xff0c;是一个命令解释器。 脚本&#xff1a;本质是一个文件&#xff0c;文件里面存放的是 特定格式的指令&#xff0c;系统可以…

如何选择快手矩阵源码:关键因素解析

在短视频行业迅速发展的今天&#xff0c;快手平台已成为众多内容创作者和企业的重要阵地。为了有效管理和运营多个快手账号&#xff0c;快手矩阵源码成为了一个关键工具。然而&#xff0c;市场上的快手矩阵源码种类繁多&#xff0c;选择一个合适的源码并非易事。本文将探讨选择…

【每日一练】python基础入门实例

""" 幼儿园加法练习题 题数不限 每满100分奖励10个棒棒糖 要求&#xff1a; 1.使用三目运算符与基础运算的对比 2.随机数字相加 3.调用函数 4.循环执行练习题 5.有计算分数 6.有时间停止休眠 """ #导入随机模块 import random #导入时间模块 imp…

聚观早报 | 蚁天鉴2.0发布;理想汽车推送无图NOA

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 7月8日消息 蚁天鉴2.0发布 理想汽车推送无图NOA 特斯拉推送FSD v12.4.3 iQOO Neo9s Pro配色公布 百川智能AI健康…

【知识专栏丨python数据采集数据分析实战】电商数据分析案例

今天这篇文章将给大家分享一个电商数据采集和数据分析的案例。 电商数据采集&#xff1a; https://www.heywhale.com/mw/project/604ae69d89c874001527ff16 下面我们先来简单了解一下数据。 01 数据信息 数据来源&#xff1a; https://www.kesci.com/mw/dataset/601e971ab23…

OpenCV对图片中的水果进行识别计算其面积长度等

本项目所用到的技术有&#xff1a; OpenCV Python的一些库&#xff1a;sys,openpyxl,numpy,PyQt5,PIL 本文可以做一些课程设计的项目 本文为作者原创&#xff0c;转载请注明出处&#xff0c;如果需要完整的代码&#xff0c;可以关注我私信 上面是用到的样例图片&#xff0c;一张…

黑马点评报错@user_script:17: user_script:17: attempt to compare nil with number

后面发现是需要预先写入缓存seckill:stock:11&#xff0c;其中11是优惠券id 我数据库里面是11 &#xff0c;这里redis里面也写了11之后就好使了

pip下载本地压缩包步骤

首先从官网上下载要安装的压缩包&#xff0c;如regex的安装包 下载到本地后&#xff0c;以上面的regex为例&#xff0c;执行pip install regex-2024.5.15.tar.gz --no-dependencies --no-build-isolation

markdown文件转pdf

步骤&#xff1a;md转html转pdf pom引入 <!--markdown 转pdf--><dependency><groupId>com.vladsch.flexmark</groupId><artifactId>flexmark-all</artifactId><version>0.64.8</version></dependency><dependency&g…

数字化电池直击安全耐用痛点,绿源有望用技术赢得市场口碑

电动两轮车行业&#xff0c;正面临着长期的市场重构。从新国标的正式实行&#xff0c;到消费者对电动车需求的变化&#xff0c;局势变了。有的品牌开始更在意表面的包装&#xff0c;也有的品牌紧盯着安全和质量&#xff0c;做深层的创新。 其中&#xff0c;绿源作为电动两轮车…

力扣爆刷第160天之TOP100五连刷66-70(回溯、旋转图像、技巧题)

力扣爆刷第160天之TOP100五连刷66-70&#xff08;回溯、旋转图像、技巧题&#xff09; 文章目录 力扣爆刷第160天之TOP100五连刷66-70&#xff08;回溯、旋转图像、技巧题&#xff09;一、110. 平衡二叉树二、39. 组合总和三、543. 二叉树的直径四、470. 用 Rand7() 实现 Rand1…

免费可商用的Navicat Premium Lite要不要用?小心收到律丝函!

作者公众号&#xff1a;霸王龙的日常 专注数据库&#xff0c;分享实用的项目实战经验。 上周五写了一篇关于Navicat Premium Lite的文章&#xff0c;有网友去官网下载&#xff0c;反馈当前官网Navicat Premium Lite简介和我之前文章中的介绍的有出入。 我赶紧打开网站看了下Na…

MySQL性能优化 一、系统配置优化

数据库优化纬度有四个&#xff1a; 硬件升级、系统配置、表结构设计、SQL语句及索引。 优化选择&#xff1a; 优化成本&#xff1a;硬件升级 > 系统配置 > 表结构设计 > SQL语句及索引优化效果&#xff1a;硬件升级 < 系统配置 < 标结果设计 < SQL语句及索…

深圳网站设计一般流程是怎样的

深圳作为中国的IT产业中心&#xff0c;拥有众多优秀的网站设计公司以及专业的网站设计团队。对于一个深圳的网站设计项目&#xff0c;一般的流程是按照以下步骤进行的&#xff1a; 1. 确立需求&#xff1a;首先&#xff0c;网站设计公司需要和客户充分沟通&#xff0c;了解客户…

在信创环境中信创沙箱扮演一个什么样的角色?

在信创领域中&#xff0c;沙箱技术扮演着举足轻重的角色&#xff0c;其不仅为信息安全提供了强有力的保障&#xff0c;更为数据防泄密提供了有效手段。随着信息技术的飞速发展&#xff0c;数据安全已成为国家、企业乃至个人关注的重点。信创沙箱技术作为其中的佼佼者&#xff0…

深度网络现代实践 - 深度前馈网络之反向传播和其他的微分算法篇-续

序言 反向传播&#xff08;Backpropagation&#xff0c;简称backprop&#xff09;是神经网络训练过程中最关键的技术之一&#xff0c;尤其在多层神经网络中广泛应用。它是一种与优化方法&#xff08;如梯度下降法&#xff09;结合使用的算法&#xff0c;用于计算网络中各参数的…

瑞萨RA6M3开发实践-UART实践-亲测有效 || 过程中遇到的问题

目录 写在前面 一、开发环境 二、编译下载 三、遇到的错误及解决方法 四、开启串口uart4的打印结果 写在前面 在看这编之前要是不太懂可参考HMI-Board (rt-thread.org)&#xff0c;本文章为在此基础上进行相应开发。 一、开发环境 rtthread studio版本2.2.6&#xff0c;…