当前位置: 首页 > news >正文

数据库 | 看这一篇就够了!最全MySQL数据库知识框架!

大家好!
作为一名程序员,每天和各种各样的“数据库”打交道,已经成为我们的日常。当然,立志成为一名超级架构师的我,肯定要精通这项技能。咳咳!不过饭还是要一口一口吃的,“数据库”这个内容实在太大了,我们今天还是以关系型数据库的代表“MySQL说起,现如今,MySQL已经变得无处不在,从初创公司的小型项目到大型企业的核心系统,都在使用。
那么,作为开发者,如何系统地学习和掌握MySQL呢?

本文的核心目标有两个:
一是为你呈现一个结构化的MySQL知识框架;
二是,确保你不仅仅是“知其然”,还要“知其所以然”。
为了让这个知识框架更加直观,我画了一个思维导图,你可以看下:
在这里插入图片描述
如果你准备好深入MySQL的世界,那我们就开始吧 !


通关要求

在学习的过程中,仅仅理解概念是不够的,我们还需要将其付诸实践,验证所学并巩固。这也是“通关要求”存在的原因。下面是每个章节的挑战任务,成功完成它们,就像过关斩将,证明你已经真正掌握了这部分内容。

入门MySQL

实操验证标准
  1. 会安装配置MYSQL
  2. 创建一个MySQL实例。
  3. 完成基础的CRUD操作和一些常用的指令。
面试通关验证标准:
  1. 创建utf8 utf8mb4 这两个字符串编码的数据库有什么区别?utf8 的字符串编码会碰到什么问题?

数据库设计

实操验证标准
  1. 设计一个简单的电商数据库模型,包含商品、用户和订单三个表。
  2. 数据模型满足范式。
面试通关验证标准:
  1. 你在项目中有自己设计表结构吗?一般会怎么去设计一张表的?

我在这里为大家举个例子,在思考和回答这个问题建议结合自身熟悉的业务场景来。好,我们开始吧!

👦 候选者: 面试官你好!我大部分是负责订单业务这块的,一帮我们这边在接到一个明确的需求,然后评审设计,如果碰到需要新增表的情况。我们会把完整的数模进行重新梳理关系。然后按照业务场景和需求进行抽象。具体思考过程如下:

1. 明确业务场景和需求

  • 用户下单
  • 订单支付
  • 发货管理
  • 订单状态变更(如:待支付、已支付、已发货、已完成、已取消等)
  • 退货申请与处理

2. 确定主要实体和属性

  • 用户(User):用户ID、用户名、地址等。
  • 商品(Product):商品ID、商品名称、商品价格、商品库存等。
  • 订单(Order):订单ID、下单用户、总金额、订单状态、下单时间、支付时间、发货时间、完成时间等。
  • 订单详情(OrderDetail):关联商品、购买数量、商品当前价格等。
  • 退货申请(ReturnApplication):申请原因、申请时间、处理状态、处理结果等。

3. 确定实体之间的关系

  • 用户与订单:一对多。
  • 商品与订单详情:一对多。
  • 订单与订单详情:一对多。
  • 订单与退货申请:一对多。

4. 转化为表结构

  1. User 表:
CREATE TABLE `User` (`userID` INT PRIMARY KEY AUTO_INCREMENT,`username` VARCHAR(255) NOT NULL,`address` TEXT,……
);
  1. Product 表:
CREATE TABLE `Product` (`productID` INT PRIMARY KEY AUTO_INCREMENT,`productName` VARCHAR(255) NOT NULL,`price` DECIMAL(10, 2),`stock` INT,……
);
  1. Order 表:
CREATE TABLE `Order` (`orderID` INT PRIMARY KEY AUTO_INCREMENT,`userID` INT,`totalAmount` DECIMAL(10, 2),`status` ENUM('pending', 'paid', 'shipped', 'completed', 'canceled'),`orderTime` DATETIME,`paymentTime` DATETIME,`shippingTime` DATETIME,`completionTime` DATETIME,……FOREIGN KEY (`userID`) REFERENCES `User`(`userID`)
);
  1. OrderDetail 表:
CREATE TABLE `OrderDetail` (`orderDetailID` INT PRIMARY KEY AUTO_INCREMENT,`orderID` INT,`productID` INT,`quantity` INT,`currentPrice` DECIMAL(10, 2),……FOREIGN KEY (`orderID`) REFERENCES `Order`(`orderID`),FOREIGN KEY (`productID`) REFERENCES `Product`(`productID`)
);
  1. ReturnApplication 表:
CREATE TABLE `ReturnApplication` (`applicationID` INT PRIMARY KEY AUTO_INCREMENT,`orderID` INT,`reason` TEXT,`applicationTime` DATETIME,`status` ENUM('pending', 'approved', 'rejected'),……FOREIGN KEY (`orderID`) REFERENCES `Order`(`orderID`)
);

5. 优化设计
第一轮我们会把这些属性头脑风暴然后一一都列出来。判断它们是否符合范式。若一张表字段过多就要拆表了。表设计是个很复杂的活计,一般都是专门的DBA进行设计。当然也会有我们程序员的参与。

👦 候选者: 这个过程大概就是这样。

总结

如果可以,可以把自己的话录下来,然后复盘自己的对话。一般情况下表结构的设计会有多人参与,毕竟对数据库的频繁改动是很要命的


SQL操作

实操验证标准
  1. 编写一个涉及子查询和JOIN操作的复杂查询语句,同时使用Explain对其进行分析。

InnoDB存储引擎

实操验证标准
  1. 画出B+树的基础结构,并对比其与普通二叉搜索树的优势。
面试通关验证标准:
  1. 你能讲讲执行一条 select 语句,期间发生了什么?
  2. MySQL 一行记录是怎么存储的?
  3. 为什么 MySQL 采用 B+ 树作为索引?
  4. 索引失效有哪些?

性能与优化【重点突击】

实操验证标准
  1. 创建一个并发场景(比如通过脚本模拟),观察并描述数据库的锁机制如何工作。演示如何利用日志进行数据恢复。
面试通关验证标准:
  1. Buffer Pool 是什么?它有什么作用?
  2. 事务隔离级别是怎么实现的?
  3. MySQL 可重复读隔离级别,完全解决幻读了吗?
  4. MySQL 日志:undo logredo logbinlog 有什么用?
  5. MySQL 有哪些锁?
  6. MySQL 是怎么加锁的?
  7. update 没加索引会锁全表?
  8. MySQL 记录锁+间隙锁可以防止删除操作而导致的幻读吗?
  9. MySQL 死锁了,怎么办?
  10. 字节面试:加了什么锁,导致死锁的?

与Java的合作

实操验证标准
  1. 使用Java配合Mybatis框架,对你之前设计的电商数据库模型进行基本的CRUD操作。

备份与高可用

实操验证标准
  1. 为你的电商数据库建立一个备份策略。
  2. 当数据过大,设计一个简单的数据分片方案并实操。

学习资料推荐

  1. MySQL技术内幕
    在这里插入图片描述
    这本书我并不是特别推荐,不是书本身不好,而是好书太多了,毕竟第二版印刷时间也在10年前。我会把它当作工具书进行翻阅。比如我想要知道数据库性能影响点有哪些…

  2. MySQL是怎样运行的

这本书有两个版本:掘金小册出版书籍;如果你是刚入门的新手,那我推荐你看这本书,因为作者就是以一位新手的视角带你入门,非常友好。

  1. MYSQL实战45讲

在这里插入图片描述
极客时间的课程,如果你是新人可以有免费7天的体验卡。作者是前腾讯云数据库负责人,用大佬已经不足以形容他的厉害。极客时间的课程最厉害的地方在于它能带动你去思考,每节开头结尾都以问句形式让你进入状态。

贪多嚼不烂 !这三本已经可以满足入门进阶的标准了。如果你想更进一步并且集大成,你需要通过各种书籍,文章去自我印证。形成自己的思想并输出。


面试题资料推荐

  1. 如何保障MySQL和Redis的数据一致性?
    在这里插入图片描述

  2. 面试逆渣
    在这里插入图片描述

  3. Java Guide面试题汇总
    在这里插入图片描述


总结

本篇已毕,受限于知识广度。我只按照本人的学习路径和理解来写这篇文章。如果各位有什么建议或者补充,欢迎评论区留言!我会持续更新完善这篇文章。

相关文章:

数据库 | 看这一篇就够了!最全MySQL数据库知识框架!

大家好! 作为一名程序员,每天和各种各样的“数据库”打交道,已经成为我们的日常。当然,立志成为一名超级架构师的我,肯定要精通这项技能。咳咳!不过饭还是要一口一口吃的,“数据库”这个内容实在…...

Android 控件背景实现发光效果

主要实现的那种光晕效果&#xff1a;中间亮&#xff0c;四周逐渐变淡的。 这边有三种发光效果&#xff0c;先上效果图。 第一种、圆形发光体 实现代码&#xff1a;新建shape_light.xml&#xff0c;导入以下代码。使用时&#xff0c;直接给view设置为background。 <?xml …...

安全狗亮相厦门市工信领域数据安全宣贯培训会

10月31日&#xff0c;厦门市工业和信息化局&#xff08;市大数据管理局&#xff09;顺利举办厦门市工信领域数据安全宣贯培训。 作为国内云原生安全领导厂商&#xff0c;安全狗以厦门市工业领域数据安全管理支撑单位身份受邀出席此次会议。 据悉&#xff0c;此次活动旨在贯彻…...

最长回文子串

问题 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同…...

从瀑布模式到水母模式:ChatGPT引领软件研发的革新之路

ChatGPT引领软件研发的革新之路 概述操作建议本书优势 内容简介作者简介专家推荐读者对象目录直播预告写在末尾&#xff1a; 主页传送门&#xff1a;&#x1f4c0; 传送 概述 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了…...

一种使用wireshark快速分析抓包文件amr音频流的思路方法

解决方案&#xff1a; 1. 使用wireshark过滤amr,并导出原始数据文件&#xff1b; 2.使用ue的二进制编辑模式&#xff0c;编辑该文件&#xff0c;添加amr头&#xff0c;6个字节数据“#!AMR”&#xff0c;字节数据为 23 21 41 4D 52 0A 3.修正格式&#xff1a;通过抓包发现&#…...

银河麒麟x86版、银河麒麟arm版操作系统编译zlmediakit

脚本 # 安装依赖 gcc-c.x86_64 这个不加的话会有问题 sudo yum -y install gcc gcc-c libssl-dev libsdl-dev libavcodec-dev libavutil-dev ffmpeg git openssl-devel gcc-c.x86_64mkdir -p /home/zenglg cd /home/zenglg git clone --depth 1 https://gitee.com/xia-chu…...

InnoDB - 双写机制

双写机制用于提高数据持久性和可靠性。 双写机制的核心思想是&#xff0c;将写操作先写入一个临时缓冲区&#xff0c;然后再写入实际的数据文件。这个临时缓冲区通常是固定大小的内存缓冲区&#xff0c;称为双写缓冲。这个机制的主要目的是避免数据文件在写入时出现损坏或数据…...

【蓝桥杯选拔赛真题08】C++最大值最小值平均值 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析

目录 C/C++最大值最小值平均值 一、题目要求 1、编程实现 2、输入输出 二、算法分析</...

软考高级系统架构设计师系列之:系统开发基础知识、项目管理、信息安全和网络安全、计算机网络章节选择题详解

软考高级系统架构设计师系列之:系统开发基础知识、项目管理、信息安全和网络安全、计算机网络章节选择题详解 一、产品配置二、需求管理三、需求跟踪四、软件生命周期五、RUP六、耦合与内聚七、软件文档八、软件需求九、软件活动十、项目时间管理十一、需求管理十二、项目范围…...

0基础学习PyFlink——时间滑动窗口(Sliding Time Windows)

在《0基础学习PyFlink——时间滚动窗口(Tumbling Time Windows)》我们介绍了不会有重复数据的时间滚动窗口。本节我们将介绍存在重复计算数据的时间滑动窗口。 关于滑动窗口&#xff0c;可以先看下《0基础学习PyFlink——个数滑动窗口&#xff08;Sliding Count Windows&#x…...

API安全之《大话:API的前世今生》

写在前面&#xff1a;本文结合API使用的业界现状&#xff0c;系统性地阐述API的基本概念、发展历史、表现形式等基础内容&#xff0c;主要包含以下内容&#xff1a; 1.什么是API 2.API的发展历史 3.现代API常用消息格式 4.top N 互联网企业API 使用现状 当前的世界是一个信…...

H5或者Vue实现二维码识别

前言 1、扫码识别库采用开源的zxing/library 2、支持js&#xff0c;Vue&#xff0c;lit等实现 原文章地址和代码仓库地址 1、在界面创建video标签用来显示摄像头内容 <!-- 视区 --><!-- lit写法 --> <video ${ref(this.videoRef)} class"xy-scan-wrap…...

stm32整理(三)ADC

1 ADC简介 1.1 ADC 简介 12 位 ADC 是逐次趋近型模数转换器。它具有多达 19 个复用通道&#xff0c;可测量来自 16 个外部 源、两个内部源和 VBAT 通道的信号。这些通道的 A/D 转换可在单次、连续、扫描或不连续 采样模式下进行。ADC 的结果存储在一个左对齐或右对齐的 16 位…...

Redis-持久化+主从架构

文章目录 Redis的持久化RDB模式异步持久化的实现AOF模式总结 Redis的主从架构1.端口以及文件调试测试2.主从配置3.数据同步原理&#xff08;第一次同步为全局同步&#xff09;4.增量同步5.主从配置优化6.问:master主机怎么判断从机slave是不是第一次同步数据&#xff1f; Redis…...

STM32H750之FreeRTOS学习--------(四)中断管理

四、FreeRTOS中断管理 中断的概念不再过多叙述&#xff0c;学习过逻辑的都知道 中断的执行过程 中断请求 外设产生中断请求&#xff08;GPIO外部中断、定时器中断等&#xff09;响应中断 CPU停止执行当前程序&#xff0c;转而去执行中断处理程序&#xff08;ISR&#xff09;…...

Macroscope安全漏洞检测工具简介

学习目标&#xff1a; 本介绍旨在帮助感兴趣者尽快了解 Macroscope&#xff0c;这是一款用于安全测试自动化和漏洞管理的企业工具。 全覆盖应用程序安全测试&#xff1a; 如下图所示&#xff0c;如果使用多种互补工具&#xff08;SAST/DAST/SCA 等&#xff09;来检测应用程序…...

【Linux】Nignx的入门使用负载均衡动静分离(前后端项目部署)---超详细

一&#xff0c;Nignx入门 1.1 Nignx是什么 Nginx是一个高性能的开源Web服务器和反向代理服务器。它使用事件驱动的异步框架&#xff0c;可同时处理大量请求&#xff0c;支持负载均衡、反向代理、HTTP缓存等常见Web服务场景。Nginx可以作为一个前端的Web服务器&#xff0c;也可…...

【入门Flink】- 04Flink部署模式和运行模式【偏概念】

部署模式 在一些应用场景中&#xff0c;对于集群资源分配和占用的方式&#xff0c;可能会有特定的需求。Flink为各种场景提供了不同的部署模式&#xff0c;主要有以下三种&#xff1a;会话模式&#xff08;Session Mode&#xff09;、单作业模式&#xff08;Per-Job Mode&…...

react面试要点

# React面试知识点 ## React是什么&#xff1f;谈一谈你对react的理解 1 React是一个网页UI库 2 react的特点是 声明式 组件化 通用性 3 react优点&#xff1a; 简单&#xff0c;低耦合高内聚&#xff0c;由于虚拟dom概念&#xff0c;可以做到一次学习到处使用。 …...

基于Wan 3D Causal VAE(Show-o2)的模型,重新完整地分析 10分钟的视频 对应多少 vison token

可以。这次我按 Show-o2 官方 432432 配置 和 Wan 3D Causal VAE 的公开时间压缩规则,把 10B token 且全部都是 vision token 的情况重新完整算一遍。下面的“大小”我统一按 未压缩 RGB 原始数据量 来算;如果你问的是实际 JPG / PNG / MP4 落盘大小,那会随压缩格式、码率和…...

大疆诉影石创新专利侵权,FTO综合分析筑牢研发风控屏障

3月23日&#xff0c;全球无人机巨头大疆对同行影石创新提起专利权属纠纷诉讼&#xff0c;涉案6项专利聚焦无人机飞行控制、结构设计、影像处理等核心技术领域&#xff0c;这场行业龙头间的知识产权纠纷&#xff0c;成为近日行业关注焦点。职务发明权属成为争议关键本次纠纷由大…...

C语言回调函数在TCP客户端中的应用与实践

1. 回调函数基础概念解析回调函数是C语言中一种强大的编程机制&#xff0c;它允许我们将函数作为参数传递给其他函数。这种设计模式在现代编程中极为常见&#xff0c;特别是在事件驱动编程、异步操作和模块化设计中。1.1 回调函数的本质回调函数本质上是一个通过函数指针调用的…...

个人知识库构建:OpenClaw+千问3.5-27B自动整理碎片化笔记

个人知识库构建&#xff1a;OpenClaw千问3.5-27B自动整理碎片化笔记 1. 为什么需要智能知识管理 作为一个常年被信息过载困扰的技术写作者&#xff0c;我的笔记系统曾经像一座杂乱无章的仓库。微信收藏夹里躺着2000未读文章&#xff0c;Obsidian里有500多个零散笔记&#xff…...

30个核心概念一次讲明白,小白也能轻松入门大模型(收藏版)

这几年&#xff0c;AI 几乎成了人人都在谈的话题。 有人在聊大模型&#xff0c;有人在说智能体&#xff0c;有人担心算力不够&#xff0c;也有人被“参数”、“微调”、“多模态”、“RAG”这些词绕得头晕。 结果就是&#xff1a;听了很多&#xff0c;越听越乱。 这篇文章是用尽…...

2.2.2.3 Spark实战:词频统计

本次实战涵盖了Spark词频统计&#xff08;WordCount&#xff09;的两种主流实现方式。首先&#xff0c;利用Scala在spark-shell中完成从读取文件、flatMap分词、map映射到reduceByKey聚合的完整流程&#xff0c;并实现结果的降序排序。其次&#xff0c;针对Spark 3.3.2版本的需…...

103. ancher WebSocket 与 NGINX OSS 入口控制器的故障

Environment 环境 SUSE Rancher 2.10.3AWS EKS cluster AWS EKS 集群NGINX OSS Ingress Controller (oci://ghcr.io/nginx/charts/nginx-ingress) NGINX OSS 入口控制器&#xff08;oci:// ghcr.io/nginx/charts/nginx-ingress&#xff09; Situation 地理位置 After upgrad…...

GLM-4.1V-9B-Base应用场景:建筑图纸关键结构识别与中文描述生成

GLM-4.1V-9B-Base应用场景&#xff1a;建筑图纸关键结构识别与中文描述生成 1. 建筑行业的AI视觉革命 在建筑设计领域&#xff0c;图纸解读一直是项耗时费力的工作。设计师需要花费大量时间分析图纸中的结构细节&#xff0c;撰写技术说明文档。传统的人工识别方式不仅效率低下…...

Go性能剖析pprof工具使用

Go语言凭借其高效的并发模型和简洁的语法&#xff0c;成为众多开发者的首选。随着项目规模扩大&#xff0c;性能问题逐渐显现。如何快速定位性能瓶颈&#xff1f;Go内置的pprof工具正是解决这一问题的利器。本文将带你深入了解pprof的核心功能&#xff0c;助你轻松优化代码性能…...

Jimeng LoRA环境部署教程:Python+Torch+CUDA兼容性避坑与版本匹配指南

Jimeng LoRA环境部署教程&#xff1a;PythonTorchCUDA兼容性避坑与版本匹配指南 1. 项目简介 Jimeng LoRA&#xff08;即梦LoRA&#xff09;是一个专门为LoRA模型测试设计的轻量级文本生成图像系统。这个项目的核心价值在于它能让你只用加载一次基础模型&#xff0c;然后快速…...