java八股文(mysql篇)

 什么是关系型数据库?

其是建立在关系模型基础上的一种数据库,这种关系分为:一对一,一对多,多对多。

我们的数据存放在表中,在表中会有一至多个字段,一行就是一条数据。

mysql有哪些字段呢?

数值类型: tinyInt,smallint,mediumInt,int, bigInt。

浮点类型:float,double。

字符类型:char varchar, tinyText, mediumText, Text, longText, tinyBlob, mediumBlob, Blob, longBlob。

时间类型:date,dateTime, year, time, timeStamp。

整数类型的unsigned属性有什么用?一般在什么场景下使用呢?

unsigned属性的作用就是不允许整数值为负数的情况,在勾选该属性后,正整数的上线就是原来的两倍。(就比如 tinyInt的范围 -128~127,如果勾选这个属性后,其范围就是0~255)

当我们的id从0开始做自增操作时就适合使用此属性,这样id就可以取到更大的值。

char和varchar的区别及其使用场景是什么?

char和varchar的区别

char字符串的长度是固定的,而varchar字符串的长度是可变的。

char字符串在写入的字符串长度没有达到设置的长度时,会从右边填满空格直达达到设置的长度,在检索的是会去掉空格。

varchar字符串会使用一至两个字符来记录字符串的长度,在检索的时候无需其他的处理。

char和varchar的使用场景

char适合使用在字符串的长度较小的情况,就比如:被MD5加密后的秘密,身份证号。

varchar适合使用在那些字符串长度变化幅度较大的情况,就比如:文章的标题。

varchar(100)和varchar(10)的区别是什么?

varchar(100)和varchar(10)都是可变长字符串,但在字符串的储存上varchar(100)可以储存更长的字符串。

在存入的字符串长度相同的时候:

1.varchar(100)和varchar(10)在磁盘上的存储大小是相同的。

2.varchar(100)和varchar(10)在内存上,varchar会消耗更多的内存,因为在内存操作时,通过会分配固定大小的内存来进行操作,而这个分配的大小就是根据设置的长度确定的,是varchar(100)会更消耗内存。

DECIMAL和FLOAT/DOUBLE的区别是什么?在java是如何操作DECIMAL的呢?

DECIMAL和浮点数的区别 

DECIMAL重要是用来记录存储的小数值,而浮点数这是存储近似的小数值(在浮点数中,就比如: 0.3可能会被用0.3000001表示,只能是个近似值),在一些数据中为了防止这种精度的损失就使用DECIMAL,就比如在我们处理金额信息的时候会使用DECIMAL。

java中操作DECIMAL

在java中我们主要是通过使用类Java.math.BigDecimal来操作的。

为什么不推荐使用Text和Blob呢?

Text和char/varchar的作用类似,但是它存储更长的字符串,就比如可以储存博客内容。

Blob主要储存二进制的大对象,就比如:图片,音频。

但在数据库规范中不推荐我们使用Text和Blob,在字符串长度范围知道的情况下,推荐使用varchar。Text和Blob存在大量的缺点。

缺点:

1.不能设置默认值。

2.检索效率较低。

3.不能直接设置索引,需要先设置前缀长度。

4.可能会消耗大量的网络和IO宽带。

5.可能会导致增删改查效率变低。

DATETIME和TIMESTAMP有什么区别?

DATETIME没有时区信息,而TIMESTAMP则与时区相关。

在储存空间上,TIMESTAMP使用4个字节储存数据,而DATETIME使用8个字节储存数据。因此TIMESTAMP所能表示的时间范围更小。

DateTime的表示范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。

TimeStamp的表示范围:1970-01-01 00:00:01 ~ 2037-12-31 23:59:59。

总结:与时区是否相关,储存的大小,可表示的时间范围。

NULL和‘ ’的区别是什么?

1.NULL代表的是一个不确定的值,在select NULL = NULL的值为false,但是在使用distinct(去重),order By(排序),group By(分组)的时候NULL是相等的。

2.‘ ’的长度为0,不会占用空间,而NULL会占用空间。

3.NULL会影响聚合函数的结果,如使用sum,avg,min,max等函数时,会忽略NULL的值。

在使用count函数时,如果是count(*)则会统计符合条件的数据(即使数据中的值为NULL),而如果是count(某个字段),则当改字段为NULL的时候就不会被统计进去。

4.在NULL做逻辑判断的时候不能使用比较远算符号(<,=,>),而是要使用IS NULL,IS NOT NULL,' '做判断的时候则可以直接使用比较运算符号。

Boolean类型是如何表示的?

在数据库中没有Boolean类型,所以一般使用Tinyint(1)表示,当数据为0的时候表示为false,当数据为1的时候表示为true。

MySQL的基础架构

连接器:身份认证和权限校验。

缓存:缓存对应的数据,执行语句的时候会先查询缓存。(在MySQL8.0后移除了该缓存,因为该功能不太实用)

分析器:在缓存中没有查到数据后就会进入分析器中,分析器主要就是判断语句的作用和判断语句是否存在语法错误。

优化器:按照Mysql认为的最优方案来执行。

执行器:执行语句然后从储存引擎中返回数据。在执行语句前会判断权限,如果权限不够就会放回错误信息。

插件式储存引擎:用于储存和读取数据的引擎。就比如:InnoDB,MyISAM,Memory等储存引擎。

执行流程

连接器进行连接 -> 进入缓存查询数据->如果没有数据就进入分析器,分析语句的作用和判断语法的正确性->进入优化器,按mysql认为的最优方法执行->进入执行器,判断权限,并执行语句->加入储存引擎读取数据。

MySQL支持那些储存引擎?默认的储存引擎是什么?

mysql支持的储存引擎 

我们可以通过以下指令查询mysql支持的储存引擎。

select Engines

我目前知道的储存引擎就是: InnoDB,MyISAM,Memory。

InnoDB是mysql支持的储存引擎中唯一支持事务的引擎。

默认的储存引擎 

在Mysql 5.5.5之前,默认的储存引擎是MyISAM。

在Mysql5.5.5之后,默认的储存引擎就是InnoDB。(因为innoDB支持事务)

mysql储存引擎的架构了解过吗?

mysql的储存引擎采用的是插件式架构,mysql支持多种储存引擎,我们甚至可以为不同的表设置不同的储存引擎,储存引擎是基于表的,而非基于库的。储存引擎可以理解为一个一个的插件。

我们还可以使用mysql定义的储存引擎实现的标准接口,自定义储存引擎。

InnoDB和MyISAM的区别是什么?

在最开始的时候,默认的储存引擎就是MyISAM,但是其不支持事务,最终默认的储存引擎就被换为InnoDB。

1.InnoDB支持行级锁,而MyISAM只支持表级锁,在并发大量写操作时,MyISAM锁住整张表,就会导致大量的写无法完成。

2.InnoDB支持事务且实现了事务的四大特性,而MyISAM不支持事务。

3.InnoDB和MyIAM的索引都是基于b+树结构的,但是其实现方式是不相同的,InnoDB的数据文件就是索引文件,而MyISAM的索引文件和数据文件则是分离的。

4.InnoDB异常崩溃后的自动恢复,但数据发生崩溃后,重启数据裤后数据就会恢复到崩溃之前,而MyISAM是不支持的。

5.InnoDB的性能比MyISAM好。

6.InnoDB支持MVCC(多版本并发控制,解决事务的隔离性,防止出现脏读),而MyISAM不支持。MVCC就是基于行级锁实现的。

 InnoDB和MyISAM如何选择?

在现在基本上是不会考虑使用MyISAM,如果你不在意并发能力,也不需要事务的支持,并且不在意崩溃异常后的自动恢复的话,我们就可以使用MyISAM。

mysql 索引

mysql索引面试难点

mysql日志

日志类型为下:

1.错误日志(err log): 对于mysql的启动,运行,关闭过程进行记录。

2.二进制日志(binary log):主要是记录更改数据库的SQL语句。

3.一般查询日志(general log):主要是记录客户端发送到数据库中的所有SQL语句。

4.慢查询日志(slow query log):记录执行时间超过long_query_time的所有查询语句,在后续解决慢查询的时候会使用到。

5.事务日志(rado log和undo log):rado log是做重日志,undo log是做回滚日志。

6.中断日志(relay log):就是复制过程中产生的日志,跟二进制日志差不多,relay log针对的是主从复制中的从库。

7.DDL日志(metadata log): DDL语句就是对库的增删改操作,记录DDL操作的日志。

什么是事务?

数据库事务可以保证,多个数据库操作构成一个逻辑整体,到达:要么都成功,要么都失败的效果。

数据库事务有四大特性

1.原子性(Atomicity):在事务中的sql语句要么都成功,要么都失败。 

2. 一致性(Consistency):在事务中,总值不会发生改变。就比如:转账问题,A有100,B有100,那在sql语句执行完之后,它们的总金额一直就是200,这就是一致性。

3.隔离性(Isolation):事务和事务之间是不会相互影响的结果的。

4.持久性(Durability):在事务完成之后数据会持久化到数据库。

只有保证事务的持久性,原子性,隔离性,才能保证事务的一致性。

并发事务带来了什么问题?

脏读

当事务读取到另一个事务中没有被提交的数据时就会可能出现脏读的情况。就比如:当事务1对某个数据进行了修改且事务1还没进行提交,此时事务2读取到事务1未提交的数据,正好事务1进行了回滚操作,事务1就脏读了。

丢失修改

当事务1和事务2都同时修改某个数据,但是可能会出现事务2的修改将事务1的修改给覆盖了的情况。

就比如事务1和事务2都是同时获取某个数据的值(假设值为20),两个事务都是将值-1,正确的值应该是18,但是它们没有获得到实时的数据,导致最终的值为19,导致丢失修改的情况发生。

不可重复读(注重的是记录的信息)

一个事务1在事务中多次读取某个数据,在此期间事务2对该数据进行了修改,导致事务1两次读取某个数据不一致的情况,导致不可重复读的发生。

幻读(注重的时是记录的数量)

和不可重复读类似,事务1多次读取某个范围的数据,但事务2往这个范围插入了新的数据,当事务1下次读取数据就发现多出了几条数据,就像读到不存在的数据似的,导致幻读的发生。

幻读和不可重复读的区别是什么?

不可重复读的重点是在多次查询某些记录,发现记录被修改。

而幻读的重点是在多次查询某些记录,但发现记录的数量发生改变。

可以说幻读是不可重复读的一种情况。

那为为什么要将幻读和不可重复读单独分开呢?

幻读和不可重复读在解决方案上是不一样的,不可重复读使用行级锁来解决的,我们就是对应的记录行上锁,防止被修改。而幻读则是使用间隙锁解决的,我们无法对还没创建的记录加锁(不能使用行级锁的原因)。

MySQL有哪些隔离级别呢?

READ-UNCOMMITED(读取未提交):最低的隔离级别,允许读取没有提交的数据,但是会导致脏读,不可重复读,幻读。

READ-COMMITED(读取已提交):允许读取并发事务已提交的数据,可以防止脏读,但是不能防止可重复读和幻读。

REPEATABLE-READ(可重复读):对同一个脏读字段读取都是一致的,除非是被当前事务修改的。

可以解决可重复读和在脏读的问题,但是还是解决不了幻读的问题。

SERIALIZABLE(可串行化):最高的隔离级别,完全服从事务的四大特性,所有的事务都是逐个执行的,这样事务之间就不会相互刚干扰了,可以解决脏读,不可重复读,幻读的问题。

MySQL的隔离级别是基于什么实现的呢?

MySQL的隔离级别是基于锁和MVCC实现的。

 可串行化是基于锁实现的,读取已提交和可重复读都是基于MVCC实现的,除可串行化以外的其他隔离级别也可能也需要使用锁,可重复读需要加锁才能解决幻读的问题。

MySQL的默认的隔离级别是什么?

InnoDB存储引擎默认的隔离级别是REPEATABLE-READ(可重复读),可以通过以下指令查询隔离级别。

select @@tx_isolation

表级锁和行级锁有了解过吗?二者有什么区别?

MyISAM仅仅支持表级锁,但是表级锁会对操作记录对应的表上锁,在处理高并发的场景下效率十分的低。InnoDB支持表级锁和行级锁,默认是行级锁。

行级锁的粒度更小,仅对应某一条记录的行就行上锁,在高并发的场景下性能更高。

二者的区别

表级锁:锁定粒度最大的一种锁(除全局锁以外),是针对非索引字段加的锁,对整个记录表加锁,实现简单,加锁速度快,资源消耗少,不会出现死锁的现象,但有可能出现锁冲突的情况,在高并发的场景下效率极低,表级锁和存储引擎无关,MyISAM和InnoDB都支持表级锁。

行级锁:锁定粒度最小的一种锁,是针对索引字段加的锁,对记录的行进行加锁,行级锁大大降低了锁冲突的问题,在高并发的场景下效率较高,但加锁开销大,加锁速度慢,可能会存在死锁的情况,表级锁和存储引擎相关,是基于存储引擎层实现的。

使用行级锁的时候需要注意什么?

InnoDB的行级锁是针对索引字段加的锁,而表级锁是针对非索引字段加的锁,当我们执行update,delete操作时,如果where语句没有命中唯一索引或者索引失效的话,就会导致扫描全表中的所有行,并对每个行加行级锁,导致效率低下,所以需要注意。 

InnoDB有哪几种行锁?

记录锁(Record Lock):单个行记录上的锁。

间隙锁(Gap Lock):锁定某个记录范围的锁,但是不包括记录本身。

 临键锁(Next-key Lock):就是一种特殊的间隙锁,它使用到记录锁和间隙锁,其效果就是锁定某个范围并且包括记录本身。拥有解决幻读的问题。

InnoDB默认的隔离级别是可重复读,行锁默认的就是使用临键锁,如果操作的索引是唯一索引或是主键的话,InnoDB会对临键锁进行优化,将临键锁降级为记录锁,只锁住索引本身,而不是一个范围。

了解过共享锁和排他锁吗?

共享锁:在事务在读取记录的时候会获取共享锁,允许多个事务同时获取共享锁。(兼容)

排他锁:也叫独占锁,在事务修改记录的时候获取排他锁,不允许多个事务同时获取排他锁,如果某个记录已经被加上了排他锁,不允许其他事务为这个记录添加其他的锁。(不兼容)

排他锁和任何的锁都不兼容,而共享锁只能兼容共享锁。

意向锁有什么用?

如果需要使用表级锁的话,我们需要判断表中的记录是否存在行级锁,如果使用遍历一条条查询的话,效率十分的低下,所以需要使用意向锁,通过意向锁判断是否可以使用表级锁。

意向共享锁(intention Share Lock IS锁):事务有意向对表中的某些记录添加共享锁,在加共享锁的时候必须先获取该表的IS锁。

意向排他锁(intetion Exclusive Lock IE锁):事务有意向对表中的某些记录添加排他锁,在添加排他锁 的时候必须先获取该表的IE锁。

意向锁是由数据引擎自己维护的,用户无法手动操作意向表,在数据行添加共享锁和排他锁时,先要获取数据行对应的表中的意向锁。

意向锁之间是相互兼容的。

意向锁和排他锁和共享锁是相互排斥的。(这里的排他锁和共享锁是表级锁,而排他锁和共享锁的行级锁和意向锁不会互斥)

当前读和快照读

当前读(普通读):就是单纯的select语句。

快照读:就是给行记录添加X锁和S锁。

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

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

相关文章

【MySQL】用户管理权限控制

文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存&#xff0c;而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…

如何在macbook上删除文件?Mac删除文件的多种方法

在使用MacBook电脑时&#xff0c;桌面上经常会积累大量的文件&#xff0c;而这些文件可能已经不再需要或已经过时。为了保持桌面的整洁和提高电脑性能&#xff0c;我们需要及时删除这些文件。本文将介绍MacBook怎么删除桌面文件&#xff0c;以及macbook删除桌面文件快捷键。 一…

C 语言左移位操作在kernel驱动子系统中的特殊用途

文章目录 前言一、C语言左移位操作介绍1. 左移位二、左移位操作在kernel 驱动子系统中的应用1. 左移位操作在 V4L2, Media 子系统中的应用实例2.左移位操作在 DRM 子系统中的应用实例2.1 左移位操作在struct drm_crtc 中的应用2.2 左移位操作在struct drm_encoder 中的应用总结…

Flutter 07 框架和三棵树(Widgets、Elements和RenderObjects)

一、Flutter框架的整体结构&#xff1a; Flutter是Google推出并开源的跨平台开发框架&#xff0c;主打跨平台、高保真、高性能。开发者可以通过Dart语 言开发Flutter应用&#xff0c;一套代码同时运行在ios和Android平台。不仅如此&#xff0c;Flutter还支持Web、桌面、嵌 入应…

【工具】OCR方法|不用下载额外的软件,提取扫描中英文PDF的目录文本的最优解!(一)

需求&#xff1a; 1&#xff09;从PDF里快速提取目录&#xff1b; 2&#xff09;不想下载任何软件。 我提取出来的目录文本会用于嵌入到PDF中&#xff0c;向PDF批量添加目录的软件以及软件的使用方法可以看我上一篇文章&#xff1a;PDF批量插入目录。 以下是我自己能想到的方…

基于yolov2网络的人脸识别系统matlab仿真,包括识别正脸,侧脸等

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、训练阶段 4.2、预处理阶段 4.3、识别阶段 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ........................................…

FastGPT | 3分钟构建属于自己的AI智能助手

这是一篇使用指南&#xff01;&#xff01;&#xff01; FastGPT是什么&#xff1f; FastGPT 是一个基于 LLM 大语言模型的知识库问答系统&#xff0c;提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排&#xff0c;从而实现复杂的问答场景&…

BEV-YOLO 论文学习

1. 解决了什么问题&#xff1f; 出于安全和导航的目的&#xff0c;自驾感知系统需要全面而迅速地理解周围的环境。目前主流的研究方向有两个&#xff1a;第一种传感器融合方案整合激光雷达、相机和毫米波雷达&#xff0c;和第二种纯视觉方案。传感器融合方案的感知表现鲁棒&am…

一句话说明:企业架构框架鼻祖Zachman

问&#xff1a;禁止废话&#xff0c;一句话表达&#xff0c;Zachman是什么&#xff1f;包含哪些内容&#xff1f; 韩老师正经回答&#xff1a;Zachman是企业架构框架鼻祖&#xff0c;包含6行6列的矩阵式架构内容。6列是5W1H&#xff08;What、How、Where、Who、When、Why&…

Vue3 简单实现虚拟Table,展示海量单词.利用WebAPI speechSynthesis,朗读英语单词

目录 本页面完整代码 视频演示 完整的页面代码 利用webapi speechSynthesis帮助我们自动郎读英语单词&#xff0c;可以利用这个API&#xff0c;做一些小说朗读或到账提示。 本页面完整代码 用Vue写了一个简单页面&#xff0c;里面还写了一个简单的虚拟Table支持海量数据展示…

kubernetes存储-volumes

目录 一、Volumes的简介 二、emptyDir卷 1、emptyDir的引入 2、emptyDir 的使用场景 3、多容器共享volumes 4、emptyDir缺点 三、hostPath卷 1、hostPath卷简介 2、创建hostPath卷 3、NFS共享文件 四、PersistentVolume&#xff08;持久卷&#xff09; 1、PV与P…

免费音效素材,不能错过这6个网站

找免费音效素材&#xff0c;那必须要上这6个网站&#xff0c;热门音效、BGM都能免费下载&#xff0c;赶紧收藏起来。 1、菜鸟图库 https://www.sucai999.com/audio.html?vNTYwNDUx 菜鸟图库是一个综合性素材网站&#xff0c;站内涵盖设计、图片、办公、视频、音效等素材。其中…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)&#xff29; Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts&#xff1f; 答&#xff1a; Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库&#xff0c;可用于制作…

力扣最热一百题——盛水最多的容器

终于又来了。我的算法记录的文章已经很久没有更新了。为什么呢&#xff1f; 这段时间都在更新有关python的文章&#xff0c;有对python感兴趣的朋友可以在主页找到。 但是这也并不是主要的原因 在10月5号我发布了我的第一篇博客&#xff0c;大家也可以看见我的每一篇算法博客…

【23真题】易!题源全部定位!带讲解!

今天分享的是23年长春理工大学808的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年长春理工808考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取&#xff01;本套试题内容难度中等偏下&#xff0c;题量较少&#xff0c;没有选择填空题&a…

算法学习打卡day41|栈和队列:栈和队列相互实现、括号匹配、逆波兰表达式、滑动窗口最大值问题、求前 K 个高频元素

栈和队列相互实现 力扣题目链接&#xff1a;用栈实现队列、用队列实现栈 题目描述&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(…

无人机航迹规划:狐猴优化算法LO求解无人机路径规划MATLAB(可以修改起始点,地图可自动生成)

一、狐猴优化算法 狐猴优化算法&#xff08;Lemurs Optimizer&#xff0c;LO&#xff09;由Ammar Kamal Abasi等人于2022年提出&#xff0c;该算法模拟狐猴的跳跃和跳舞行为&#xff0c;具有结构简单&#xff0c;思路新颖&#xff0c;搜索速度快等优势。狐猴优化算法&#xff…

JavaScript 进阶问题列表,巩固自己的知识。

不定时更新 JavaScript 进阶问题列表 从基础到进阶&#xff0c;测试你有多了解 JavaScript&#xff0c;刷新你的知识&#xff0c;或者帮助你的 coding 面试&#xff01; &#x1f4aa; &#x1f680; 答案❤️ 1. 输出是什么&#xff1f; function sayHi() {console.log(na…

iSlide2024一款基于PPT的插件工具包含38个设计辅助功能

根据使用者情况表明iSlide 是一款拥有30W素材的PPT高效设计软件&#xff0c;可提高90%工作效率&#xff0c;现全球已有超过1400万使用者&#xff0c;智能排版原创高品模板可商用图形&#xff0c;真正摆脱PPT的束缚&#xff0c;把精力用在该用的地方。我们都明白islide插件功能特…

Vue 3 中,watch 和 watchEffect 的区别

结论先行&#xff1a; watch&#xff1a;需要指明要监听的数据&#xff0c;而且在回调函数中可以获取到属性变化的前后值&#xff1b; 适用于需要精确控制监视范围的情况&#xff1b;也就是需要针对特定数据变化执行操作。 watchEffect&#xff1a;不用指明监听哪个属性&…