MySQL核心知识:春招面试数据库要点
在前文中,我们深入剖析了MyBatis这一优秀的持久层框架,了解了它如何实现SQL语句与Java对象的映射,以及其缓存机制等重要内容。而作为数据持久化的核心支撑,数据库的相关知识在Java开发中同样至关重要。MySQL作为最流行的开源关系型数据库之一,广泛应用于各类企业级项目中。在春招面试里,对MySQL核心知识的考察十分常见,下面让我们一同深入学习。
一、MySQL索引
索引类型
MySQL支持多种索引类型,常见的有以下几种:
- B+树索引:这是MySQL中最常用的索引类型,适用于大多数场景。B+树索引将数据存储在叶子节点,非叶子节点仅用于索引查找,这样可以提高范围查询和排序的效率。例如,在一个用户表中,对age字段建立B+树索引,当执行SELECT * FROM user WHERE age > 20这样的范围查询时,MySQL可以利用索引快速定位到符合条件的数据。
- 哈希索引:哈希索引基于哈希表实现,它通过对索引列的值进行哈希计算,将数据存储在哈希表中。哈希索引的特点是查询速度非常快,适用于等值查询,如SELECT * FROM user WHERE id = 1。但它不支持范围查询和排序操作,因为哈希值是无序的。
- 全文索引:主要用于文本类型字段的搜索,如TEXT和VARCHAR类型。全文索引可以对文本内容进行分词处理,然后建立索引,从而实现高效的全文搜索。例如,在一个文章表中,对content字段建立全文索引,当用户搜索特定关键词时,能够快速找到包含该关键词的文章。
索引的创建与优化
创建索引可以使用CREATE INDEX语句,例如:
CREATE INDEX idx_user_age ON user (age);
在创建索引时,需要注意避免过度索引。过多的索引会占用额外的磁盘空间,并且在数据插入、更新和删除时,会增加索引维护的开销,降低数据库的性能。同时,要根据实际的查询需求来创建索引,选择合适的字段建立索引。例如,如果经常按照name和age两个字段进行联合查询,可以创建联合索引:
CREATE INDEX idx_user_name_age ON user (name, age);
在使用联合索引时,要遵循最左前缀原则,即查询条件要按照索引字段的顺序进行匹配,才能充分利用索引。
二、MySQL事务
事务的特性
MySQL事务具有ACID特性:
- 原子性(Atomicity):事务是一个不可分割的工作单位,要么全部执行成功,要么全部失败回滚。例如,在一个转账操作中,从账户A向账户B转账100元,这个操作涉及到两个数据库操作,即从账户A扣除100元,向账户B增加100元。这两个操作必须作为一个事务来执行,要么都成功,要么都失败,以保证数据的一致性。
- 一致性(Consistency):事务执行前后,数据库的完整性约束不会被破坏。例如,在一个订单系统中,订单表和库存表之间存在关联关系,当创建一个新订单时,不仅要在订单表中插入记录,还要在库存表中扣除相应的库存。如果库存不足,事务应该回滚,以保证订单和库存数据的一致性。
- 隔离性(Isolation):多个事务并发执行时,相互之间不会干扰。MySQL提供了不同的事务隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。默认的隔离级别是可重复读,在可重复读级别下,一个事务在执行过程中多次读取同一数据,读取结果是一致的,即使在这个过程中有其他事务对该数据进行了修改。
- 持久性(Durability):事务一旦提交,其对数据库的修改将永久保存。即使系统发生故障,也不会丢失已提交的事务数据。
事务的使用
在MySQL中,可以使用BEGIN、COMMIT和ROLLBACK语句来管理事务。例如:
BEGIN;UPDATE account SET balance = balance - 100 WHERE account_id = 1;UPDATE account SET balance = balance + 100 WHERE account_id = 2;COMMIT;
如果在事务执行过程中出现错误,可以使用ROLLBACK语句回滚事务:
BEGIN;-- 执行一些数据库操作IF (出现错误) THENROLLBACK;ELSECOMMIT;END IF;
三、MySQL锁机制
锁的类型
MySQL的锁机制主要包括以下几种类型:
- 共享锁(Shared Lock,S锁):也称为读锁,多个事务可以同时获取共享锁,用于读取数据,不会相互冲突。例如,多个事务可以同时对同一行数据获取共享锁,进行并发读取操作。
- 排他锁(Exclusive Lock,X锁):也称为写锁,一个事务获取排他锁后,其他事务不能再获取该锁,直到持有排他锁的事务释放锁。排他锁用于数据的修改操作,以保证数据的一致性。例如,当一个事务要对某一行数据进行更新时,需要先获取排他锁,防止其他事务同时修改该数据。
- 行锁(Row Lock):行锁是对表中的某一行数据进行加锁,粒度最小,并发性能较高。在InnoDB存储引擎中,行锁是基于索引实现的,如果没有使用索引,行锁会升级为表锁。例如,在执行UPDATE user SET age = 25 WHERE id = 1时,InnoDB会对id为1的这一行数据加行锁。
- 表锁(Table Lock):表锁是对整个表进行加锁,粒度较大,并发性能较低。MyISAM存储引擎默认使用表锁。例如,在执行ALTER TABLE user ADD COLUMN email VARCHAR(100)时,会对user表加表锁,防止其他事务对表进行操作。
锁的应用场景
在实际应用中,需要根据业务场景选择合适的锁类型。例如,在高并发的读多写少场景中,可以使用共享锁来提高并发性能;在写操作较多的场景中,需要合理使用排他锁和行锁,以保证数据的一致性和完整性。同时,要注意避免死锁的发生,死锁是指两个或多个事务相互等待对方释放锁,导致事务无法继续执行。可以通过设置合理的事务超时时间、优化SQL语句等方式来预防死锁。
四、面试题
面试题1:MySQL索引有哪些类型?各自的特点是什么?
答案:
- B+树索引:最常用,适用于范围查询和排序,数据存储在叶子节点,非叶子节点用于索引查找。
- 哈希索引:查询速度快,适用于等值查询,但不支持范围查询和排序,基于哈希表实现。
- 全文索引:用于文本类型字段搜索,对文本内容进行分词处理后建立索引,实现高效全文搜索。
面试题2:MySQL事务的ACID特性是什么?
答案:
- 原子性:事务是不可分割的工作单位,要么全部执行成功,要么全部失败回滚。
- 一致性:事务执行前后,数据库的完整性约束不会被破坏。
- 隔离性:多个事务并发执行时相互不干扰,MySQL提供多种事务隔离级别。
- 持久性:事务一旦提交,对数据库的修改永久保存。
深入掌握MySQL的索引、事务、锁机制等知识,能让你在春招面试中更好地应对数据库相关问题。下一篇,我们将探索Redis缓存的奥秘,继续为你的春招面试备考助力。
相关文章:
MySQL核心知识:春招面试数据库要点
在前文中,我们深入剖析了MyBatis这一优秀的持久层框架,了解了它如何实现SQL语句与Java对象的映射,以及其缓存机制等重要内容。而作为数据持久化的核心支撑,数据库的相关知识在Java开发中同样至关重要。MySQL作为最流行的开源关系型…...
Hive之加载csv格式数据到hive
场景: 今天接了一个需求,将测试环境的hive数据导入到正式环境中。但是不需要整个流程的迁移,只需要迁移ads表 解决方案: 拿到这个需求首先想到两个方案: 1、将数据通过insert into语句导出,然后运行脚本 …...
Java web与Java中的Servlet
一。前言 Java语言大多用于开发web系统的后端,也就是我们是的B/S架构。通过浏览器一个URL去访问系统的后端资源和逻辑。 当我在代码里看到这个类HttpServletRequest 时 让我想到了Servlet,Servlet看上去多么像是Java的一个普通类,但是它确实…...
kafka常用目录文件解析
文章目录 1、消息日志文件(.log)2、消费者偏移量文件(__consumer_offsets)3、偏移量索引文件(.index)4、时间索引文件( .timeindex)5、检查点引文件( .checkpoint&#x…...
RV1126+FFMPEG推流项目源码
源码在我的gitee上面,感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project...
ANSYS SimAI
ANSYS SimAI 是 ANSYS 公司推出的一款基于人工智能(AI)的仿真解决方案,旨在通过机器学习技术加速仿真流程,降低计算资源需求,并为用户提供更高效的工程决策支持。其核心目标是简化复杂仿真过程,帮助工程师快…...
hedfs和hive数据迁移后校验脚本
先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…...
蓝桥杯单片机(八)定时器的基本原理与应用
模块训练: 当有长定时情况时,也就是定时长度超过65.5ms时,采用多次定时累加 一、定时器介绍 1.单片机的定时/计数器 2.定时器工作原理 3.定时器相关寄存器 二、定时器使用程序设计 1.程序设计思路 与写中断函数一样,先写一个初…...
刷题总结 回溯算法
为了方便复习并且在把算法忘掉的时候能尽量快速的捡起来 刷完回溯算法这里需要做个总结 回溯算法的适用范围 回溯算法是深度优先搜索(DFS)的一种特定应用,在DFS的基础上引入了约束检查和回退机制。 相比于普通的DFS,回溯法的优…...
C++ 静态变量static的使用方法
static概述: static关键字有三种使用方式,其中前两种只指在C语言中使用,第三种在C中使用。 静态局部变量(C) 静态全局变量/函数(C) 静态数据成员/成员函数(C) 静态局部变量 静态局部变量&…...
Langchain+文心一言调用
import osfrom langchain_community.llms import QianfanLLMEndpointos.environ["QIANFAN_AK"] "" os.environ["QIANFAN_SK"] ""llm_wenxin QianfanLLMEndpoint()res llm_wenxin.invoke("中国国庆日是哪一天?") print(…...
20250124 Flink中 窗口开始时间和結束時間
增量聚合的 ProcessWindowFunction # ProcessWindowFunction 可以与 ReduceFunction 或 AggregateFunction 搭配使用, 使其能够在数据到达窗口的时候进行增量聚合。当窗口关闭时,ProcessWindowFunction 将会得到聚合的结果。 这样它就可以增量聚合窗口的…...
Android Studio安装配置
一、注意事项 想做安卓app和开发板通信,踩了大坑,Android 开发不是下载了就能直接开发的,对于新手需要注意的如下: 1、Android Studio版本,根据自己的Android Studio版本对应决定了你所兼容的AGP(Android…...
设计模式Python版 单例模式
文章目录 前言一、单例模式二、单例模式实现方式三、单例模式示例四、单例模式在Django框架的应用 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模…...
7-Zip高危漏洞CVE-2025-0411:解析与修复
7-Zip高危漏洞CVE-2025-0411:解析与修复 免责声明 本系列工具仅供安全专业人员进行已授权环境使用,此工具所提供的功能只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利…...
python实现http文件服务器访问下载
//1.py import http.server import socketserver import os import threading import sys# 获取当前脚本所在的目录 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 设置服务器的端口 PORT 8000# 自定义Handler,将根目录设置为脚本所在目录 class MyHTT…...
《一文讲透》第4期:KWDB 数据库运维(6)—— 容灾与备份
一、KWDB 容灾 WAL 概述 KWDB 采用预写式日志(Write-Ahead Logging,WAL),记录每个时序表的模式变更和数据变更,以实现时序数据库的数据灾难恢复、时序数据的一致性和原子性。 KWDB 默认会将保存在 WAL 日志缓存中的…...
ArcGIS10.2 许可License点击始终启动无响应的解决办法及正常启动的前提
1、问题描述 在ArcGIS License Administrator中,手动点击“启动”无响应;且在计算机管理-服务中,无ArcGIS License 或者License的启动、停止、禁止等均为灰色,无法操作。 2、解决方法 ①通过cmd对service.txt进行手动服务的启动…...
Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250124
逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/1UWVY11Q1IOfME9itDN5aZA?pwdhgeg 提取码: hgeg Level2逐笔成交逐笔委托数据分享下载 通过Level2逐笔成交与逐笔委托的详细数据,这种以毫秒为单位的信息能揭示许多关键点,如庄家意图、误导性行为…...
概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础
对于连续型随机变量,分布函数(Cumulative Distribution Function, CDF)是概率密度函数(Probability Density Function, PDF)的变上限积分,概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
