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)的变上限积分,概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
