【MySQL】-知识点整理

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 事务提交后即删除


 

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

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

相关文章

mac报错:zsh: command not found: npm

1、问题概述? 在mac系统中使用npm命令的时候,mac os报错提示: zsh: command not found: npm 一般出现发这种情况的原因时没有安装npm,而npm这命令时集成在nodejs中的,所以安装nodejs就可以了。 2、解决办法 本质就是需要安装…

海外服务器被DDOS攻击了该怎么办

在当今全球化的时代,越来越多的企业和组织选择将业务拓展至海外市场。然而,随着业务的扩大和网络的延伸,也面临着来自不同地区的网络威胁和攻击风险。如果您的海外服务器遭受了DDOS攻击,以下是一些应对措施: 一、立即断…

openssl调试记录

openssl不能直接解密16进制密文,需要把密文转化成base64格式才能解密 调试记录如下:

【Linux C | 网络编程】多播的概念、多播地址、UDP实现广播的C语言例子

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…

工厂企业能源计量监测管理系统,让效果看得见、摸得着

工厂企业能源计量监测管理系统在我国工业企业中扮演着十分重要的角色。然而,我们也不得不面对一系列存在的问题,比如工业企业能源计量工作效率低下、工业企业能源计量使用的器具老旧等。这些问题不仅影响了工业企业的生产效率,还可能给环境造…

Linux内核源码分析(强烈推荐收藏!)

一,前言 Linux内核是一个操作系统(OS)内核,本质上定义为类Unix。它用于不同的操作系统,主要是以不同的Linux发行版的形式。Linux内核是第一个真正完整且突出的免费和开源软件示例。Linux 内核是第一个真正完整且突出的…

1.2_3 TCP/IP参考模型

文章目录 1.2_3 TCP/IP参考模型(一)OSI参考模型与TCP/IP参考模型(二)5层参考模型(三)5层参考模型的数据封装与解封装 1.2_3 TCP/IP参考模型 (一)OSI参考模型与TCP/IP参考模型 TCP/I…

【Java设计模式】八、装饰者模式

文章目录 0、背景1、装饰者模式2、案例3、使用场景4、源码中的实际应用 0、背景 有个快餐店,里面的快餐有炒饭FriedRice 和 炒面FriedNoodles,且加配菜后总价不一样,计算麻烦。如果单独使用继承,那就是: 类爆炸不说&a…

新装idea后的常用配置

(所有为idea new project配置默认配置的都是 File -> New Projects Settings -> Settings for New Projects) 1. 修改编码格式 大多数软件默认编码都是GBK,还有其他的,不过我们都是使用UTF-8的,这里统一设置为…

信奥一本通:1087:级数求和

这个题目的实际意思就是让这个分数一直相加&#xff0c;直到大于你输入的整数k&#xff0c;分数相加可以利用分子除分母的方式&#xff0c;将分数转换为小数&#xff0c;再进行相加 # include <iostream> using namespace std; int main(){int k;cin >> k;double …

MYSQL5.7报1205 - Lock wait timeout exceeded; try restarting transaction

简介 今天使用navicate操作添加时&#xff0c;mysql报错误&#xff0c;错误如下 原因 这个问题的原因是在mysql中产生了事务A&#xff0c;执行了修改的语句&#xff0c;比如&#xff1a; update t1 set aget18 where id1;此时事务并未进行提交&#xff0c;事务B开始运行&am…

qml中toolbox控件、ComboBox控件、PlainText实现及美化

一. 内容简介 qml中toolbox控件、ComboBox控件、PlainText实现及美化 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本…