【MySQL】-知识点整理

news2025/1/15 23:42:37

1、存储引擎

-- 查询数据库支持的存储引擎
show engines;  
-- 查询当前数据库使用的存储引擎
show variables like '%storage_engines%';

主要的存储引擎说明:
1)MyISAM:无外键、表锁、所有索引都是非聚簇索引、无事务、记录表总条数、删除表以重建表方式
2)Innodb:行锁+表锁、5.6+后支持fulltext、主键是聚簇索引、删除表以按行删除、主键不存在时创建隐藏主键
3)MEMORY:内存型,数据不落磁盘

2、索引结构

1)聚簇索引:索引与数据在一起,索引文件的叶子节点存储实际数据行
2)非聚簇索引:索引文件与数据文件分开,索引的叶子节点存储数据的逻辑地址

3、索引优化

1)回表查询:因为非聚簇索引叶子节点只存储主键ID值,
查询其他字段,需要再次进行主键索引查询,定位到具体

2)索引覆盖:select需要查询的字段只包含索引及主键字段,则直接返回结果,不需要再进行回表查询

3)索引下推:在联合索引(a,b,c),前提是满足最左前缀匹配条件下,
当查询a条件后,如果存在b及c等查询条件。会直接拿出叶子节点的索引值进行比较
而不是通过主键查询行数据再比较。避免了回表

在执行计划中,using index condition 表示使用了索引下推
默认开启,通过设置set optimizer_switch='index_condition_pushdown=off' 关闭


4、数据库3范式(3NF)

1)1NF:所有字段不可拆分,如家庭地址,拆分成省、市、县、街道、小区

2)2NF:没有局部函数依赖,如一张表(学生名、学号、课程名、成绩。。。),
存在学生名+课程名 => 成绩。拆分表,将学生id + 课程id形成联合主键

3)3NF:没有传递函数依赖,如一张表(学生名、院系名、院系地址。。。)。
存在学生名=>院系名=>院系地址

5、join查询

mysql8.0之前的版本,采用nested loop join 嵌套查询方式,以驱动表作为外层循环,被驱动表作为内层循环。导致join效率低下


1)inner join: 两表都包含的数据
2)left join :两表包含 + 左表数据
3)right join:两表包含 + 右表数据

8.0之后,采用hash join。将驱动表数据,以hash表存储在内存中,
只需要遍历一遍被驱动表,即可完成比对。
如果驱动表数据量大,内存不足,则使用磁盘空间,并将数据分片处理。
具体内存大小 使用 join_buffer_size 参数控制。

避免join查询方法
1)将多表数据读取,由应用程序进行join关联
2)使用冗余字段
3)建立大宽表,或异构到ES中


6、事务

6.1、ACID

原子性:事务是最小单位,不可拆分

一致性:事务执行前后,数据总量保持一致。如转账

隔离性:事务执行是独立的,不会被其他事务影响

持久性:事务执行后,数据要持久保存在磁盘上。

6.2、事务问题

1、脏读:一个事务读取另一个事务未提交的内容

2、不可重复读:读取同一个数据,由于另一个事务UPDATE、DELETE数据后,两次前后不一致。

3、幻读:读取范围数据,由于另一个事务DELETE、INSERT后,导致两次不一致。

6.3、隔离级别

1、读未提交RU:

2、读已提交RC:解决脏读

3、可重复读RR(默认级别:在RC基础上解决不可重复读

4、串行化:在RR基础上解决幻读

1.查看当前会话隔离级别

select @@tx_isolation;

在MySQL 8.0中:SELECT @@transaction_isolation;

2.查看系统当前隔离级别

select @@global.tx_isolation;

3.设置当前会话隔离级别

set session transaction isolatin level repeatable read;

4.设置系统当前隔离级别

set global transaction isolation level repeatable read;

5.命令行,开始事务时

set autocommit=off 或者 start transaction

7、日志文件

7.1、存储格式

1、statement:记录实际执行的sql语句

2、row:记录行内容

3、mixed:statement与row结合。

在mysql主从同步中,如果使用statement格式,只记录sql语句,在执行有歧义的语句时,导致主从库数据不一致。

如:delete from user  limit 5;

RC级别不支持statement格式

7.2、binlog

记录DDL、DML实际执行的SQL语句,并以二进制形式存储。用于主从同步

7.3、undo log

回滚日志,逻辑日志,记录sql修改前的数据。用于事务回滚。原子性、一致性

每产生一个undo log日志都会有一个trx_id和roll_point生成:
trx_id:保存生成此日志的事务id;
roll_point:将undo log连接起来形成版本连;

7.4、redo log

重做日志,物理日志,记录数据库对磁盘的修改,用于系统崩溃后的修复。持久性、

7.5、relay log

中继日志。用于从库同步主库的binlog日志,记录将要执行的内容。

redolog与binlog 都需要持久化到磁盘

undolog 事务提交后即删除


8、锁分类

1、表锁 

select from table  for update

2、行锁

where id = 11  for update

如果id主键11存在,则行锁

否则临键锁,查找上、下各一个主键,组成左开右闭的范围锁

区间为 (10,15] 

因为id =11是等值查询,退化成间隙锁 (10,15)

select * from t where id >= 10 and id < 11 for update;

3、间隙锁 gap lock

范围锁,左开右开

4、临键锁 next-key lock

范围锁,左开右闭原则

 

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

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

相关文章

Realsense 相机SDK学习(一)——librealsense使用方法及bug解决(不使用Ros)

一.介绍 realsense相机是一个intel开发出来的一款深度相机&#xff0c;我之前使用他来跑过slam&#xff0c;也配置过他的驱动&#xff0c;在此附上realsense的相机驱动安装方法&#xff1a;Ubuntu20.04安装Intelrealsense相机驱动&#xff08;涉及Linux内核降级&#xff09; …

支持S/MIME证书的邮件客户端有哪些?

S/MIME证书&#xff0c;也叫做邮件安全证书&#xff0c;支持安全/多用途互联网邮件扩展协议&#xff08;S/MIME协议&#xff09;&#xff0c;是通过加密和数字签名来确保电子邮件的安全性、保密性和完整性的数字证书。GDPR、HIPAA、FDA等多个行业都要求邮件发送方在发送邮件时对…

EasyPoi 教程

文章目录 EasyPoi教程文档1. 前传1.1 前言 这个服务即将关闭,文档迁移到 http://www.wupaas.com/ 请大家访问最新网站1.2 Easypoi介绍1.3 使用1.4 测试项目1.5 可能存在的小坑 2. Excel 注解版2.1 Excel导入导出2.2 注解注解介绍ExcelTargetExcelEntityExcelCollectionExcelIgn…

如何在群晖NAS部署WPS容器并实现无公网IP远程访问本地office软件

文章目录 1. 拉取WPS Office镜像2. 运行WPS Office镜像容器3. 本地访问WPS Office4. 群晖安装Cpolar5. 配置WPS Office远程地址6. 远程访问WPS Office小结 7. 固定公网地址 wps-office是一个在Linux服务器上部署WPS Office的镜像。它基于WPS Office的Linux版本&#xff0c;通过…

Express学习(四)

使用Express写接口 创建基本的服务器 创建API路由模块 编写GET接口 编写POST接口 CORS跨域资源共享 什么是CORS CORS由一系列HTTP响应头组成&#xff0c;这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源。浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如…

AI论文速读 | TPLLM:基于预训练语言模型的交通预测框架

论文标题&#xff1a;TPLLM: A Traffic Prediction Framework Based on Pretrained Large Language Models 作者&#xff1a;Yilong Ren&#xff08;任毅龙&#xff09;, Yue Chen, Shuai Liu, Boyue Wang&#xff08;王博岳&#xff09;,Haiyang Yu&#xff08;于海洋&#x…

【Linux进程的知识点】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档文章目录 前言 操作系统的知识补充 我们来理解一个用户操作接口&#xff1a; 进程的理解 进程的基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 …

【四】【算法分析与设计】贪心算法的初见

455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

Terrace联合创始人兼CEO Jesse Beller确认出席Hack.Summit() 2024区块链开发者大会

在科技创新的浪潮中&#xff0c;区块链技术以其独特的去中心化、透明性和安全性&#xff0c;正逐渐成为引领未来发展的重要力量。在这样的背景下&#xff0c;备受瞩目的Hack.Summit() 2024区块链开发者大会即将于4月9日至10日在香港数码港盛大举行。本次大会的亮点之一&#xf…

Linux系统安全②SNAT与DNAT

一.SNAT 1.定义 利用SNAT技术实现2台私网地址都可以访问公网 2.实验环境准备 &#xff08;1&#xff09;三台服务器&#xff1a;PC1客户端、PC2网关、PC3服务端。 &#xff08;2&#xff09;硬件要求&#xff1a;PC1和PC3均只需一块网卡、PC2需要2块网卡 &#xff08;3&a…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇

onBeforeUnload onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) > boolean) 刷新或关闭场景下&#xff0c;在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点&#xff0c;才会触发此回调。 参数…

docker部署多功能网络工具箱

功能 查看自己的IP&#xff1a;从多个 IPv4 和 IPv6 来源检测显示本机的IP 查看IP信息&#xff1a;显示所有 IP 的相关信息 可用性检测&#xff1a;检测一些网站的可用性 WebRTC 检测&#xff1a;查看使用 WebRTC 连接时使用的 IP DNS 泄露检测&#xff1a;查看 DNS 出口信息 …

NVMFS5A160PLZT1G汽车级功率MOSFET P沟道60 V 15A 满足AEC-Q101标准

关于汽车电子AEC Q101车规认证&#xff1f; 是一种针对分立半导体的可靠性测试认证程序&#xff0c;由汽车电子协会发布。这个认证程序主要是为了确保汽车电子产品在各种严苛的条件下能够正常工作和可靠运行。它包括了对分立半导体的可靠性、环境适应性、温度循环和湿度变化等…

STM32平替GD32有多方便

众所周知, GD32一直模仿STM32,从未被超越。 我最近公司使用的GD32E230C6T6 这款芯片有48个引脚。 属于小容量的芯片。 我有一个用STM32写的代码,之前是用的 STM32F103CB 这款芯片是中容量的。 不过在keil中,只需要这两步,就能使用原来的逻辑,几乎不用修改代码。 1. …

武汉儿童医院变电所电力运维平台系统的设计及应用

彭姝麟 Acrelpsl 1 引言 2015年国务院发布《中共中央、国务院关于进一步深化电力体制改革的若干意见》&#xff08;中发[2015]9号&#xff09;&#xff0c;简称“电改9号文”。而本次新电改的重点是“三放开一独立三强化”&#xff1a;输配以外的经营性电价放开、售电业务放开…

APP测试基本流程以及APP测试要点

一、 APP测试基本流程 1、流程图 2、测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。 3、测试资源 测试任务开始前&#xff0c;…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的车牌检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细介绍了如何利用深度学习技术开发一个先进的车牌检测系统&#xff0c;并附上了完整的实现代码。系统核心采用了强大的YOLOv8算法&#xff0c;并对前代版本如YOLOv7、YOLOv6、YOLOv5进行了详尽的性能评估&#xff0c;包括mAP和F1 Score等关键指标的对…

three.js 鼠标左右拖动改变玩家视角

这里主要用到了 一个方法 obj.getWorldDirection(); obj.getWorldDirection()表示的获取obj对象自身z轴正方向在世界坐标空间中的方向。 按下 W键前进运动&#xff1b; <template><div><el-container><el-main><div class"box-card-left…

Qt(C++) | QPropertyAnimation动画(移动、缩放、透明)篇

动画类继承关系图 # QPropertyAnimation QPropertyAnimation是一个可以在Qt应用程序中使用的动画框架。它可以用于创建各种动画效果,包括但不限于以下几种: 1. 移动动画:可以将一个对象从一个位置平滑地移动到另一个位置。比如,你可以创建一个按钮,当用户点击它时,按钮…

Python语法基础

Python 运行方式 交互解释器&#xff1a;进入交互解释器 Pycharm 里面有个 Terminal 终端&#xff0c;点击即可进入Python的交互环境 语句快缩进 同行多个语句 输出语句:print 输入语句: 变量定义: 变量赋值: 运算符: 基本数字类型: 数字表示方法: 定义字符串: 定义列表: