面试题------>MySQL!!!

一、连接查询

①:左连接left join (小表在左,大表在右)

②:右连接right join(小表在右,大表在左)

二、聚合函数

SQL 中提供的聚合函数可以用来统计、求和、求最值等等

COUNT:统计行数量

SUM:获取单个列的合计值

AVG:计算某个列的平均值

MAX:计算列的最大值

MIN:计算列的最小值

三、SQL 关键字

①分页:limit

SELECT * FROM student3 LIMIT 100,6; 查询学生表中数据,跳过100条,从第101条开始显示,取6 条

②倒序:order by ... desc

select * from user order by id desc limit 0 6

③分组:group by

SELECT sex , count(*) FROM student GROUP BY sex

④去重:distinct

select DISTINCT NAME FROM student3;

四、 SQL Select 语句完整的执行顺序

查询中用到的关键词主要包含如下展示,并且他们的顺序依次为

form...left join...on...where...group by...having..select...avg()/sum()...order by...asc/desc...limit...

from: 需要从哪个数据表检索数据

where: 过滤表中数据的条件

group by: 如何将上面过滤出的数据分组算结果

order by : 按照什么样的顺序来查看返回的数据

五、 数据库三范式(掌握)

第一范式:

1NF 原子性,列或者字段不能再分,要求属性具有原子性不可再分解;

第二范式:

2NF主要是解决的冗余。

1.每一行数据有唯一的主键

  1. 非主键字段必须依赖于主键字段

第三范式:

3NF主要是解决 的冗余。

非主 键****字段不依赖于其它非主键字段

我们有时候并不会严格的遵守第三范式,例如我们在设计订单明细表的时候,我们冗余了商品的名称和图片,因为我们通过商品id再去查询商品表会给基础表造成压力,所以我们冗余了两个字段。

六、存储引擎 :MyISAM 存储引擎 与 InnoDB 引擎区别

①. 事务支持:MyLISAM不支持事务,InnoDB支持事务。

②. 锁定机 制(锁的粒度) :MyISAM 表级锁 InnoDB 支持行级锁

③. 外键支持 :MyISAM 不支持外键约束 ;而 InnoDB 支持外键约束。(一般不用外键,我们在使用外键过程中,删除的时候需要)

④. 并发性能 : InnoDB 支持行级锁定和事务处理,InnoDB 的并发性能更高

七、数据库事务(必会)

1.事务特性ACID

原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

一致性 :事务必须使数据库从一个一致性状态变换到另一个一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态。拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还是5000,这就是事务的一致性。

隔离性:即一个事务执行之前和执行之后都必须处于一致性状态。

持久性:事务一旦结束,数据就持久到数据库

如何保持事务特性:

  • redo log持久性,当数据库对数据做修改的时候,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为dirty page脏数据,如果这个时候发生非正常的DB服务重启,那么这些数据还在内存,并没有同步到磁盘文件中,也就是会发生数据丢失,如果这个时候,能够在有一个文件,当buffer pool中的data page变更结束后,把相应修改记录记录到这个文件(注意,记录日志是顺序IO),那么当DB服务发生crash的情况,恢复DB的时候,也可以根据这个文件的记录内容,重新写到到磁盘文件,这样数据就保持一致。

  • undo log一致性原子性 。 undo日志用于存放数据被修改前的值,如果修改出现异常,可以使用undo日志来实现回滚操作,保证事务的一致性。另外InnoDB MVCC事务特性也是基于undo日志实现的。undo日志分为insert undo log(insert语句产生的日志,事务提交后直接删除)和update undo log(delete和update语句产生的日志,由于该undo log可能提供MVVC机制使用,所以不能再事务提交时删除)

2.隔离级别

读未提交:脏读

脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。当前事务读到的数据是别的事务想要修改但是没有修改成功的数据。

A读了B回滚前的数据。

读已提交:不可重复读,针对update和delete

可重复读:幻读,针对insert

解决方法:采用多版本并发控制(M++VCC++,Multiversion Concurrency Control)机制解决了该问题。·

串行化:一个一个来,有效解决脏读,不可重复读,幻读,就是效率很低。

八、索引的优点和缺点(空间换时间)

优点:加快查询效率

缺点:占用内存空间,增删改的效率较低(删除数据的时候还需要删索引的相关数据,故效率低)

九、索引的分类

①:普通索引:值可以重复

②:唯一索引:唯一,允许有一个空值

③:主键索引:不为空,只能有一个

④:联合索引:(手机号和密码),(订单id和status)

⑤:全文索引:虽然MySQL支持全文索引但我们并没有采用,我们采用ES做搜索引擎。

十、B树与B+树的主要区别

存储数据的位置:

B树: 数据既存储在所有节点中(叶子节点和非叶子节点都有数据)

B+树: 所有的数据记录都存储在叶子节点中,非叶子节点仅包含索引信息。叶子节点包含了完整的数据和索引键。

叶子节点之间的链接:

B树: 叶子节点之间没有链接。

B+树: 叶子节点之间通过指针相互链接,形成一个链表或循环链表,这使得范围查询和遍历变得高效。

十一、MySql Explain优化命令使用

truncate table student // 自增id 从 0 开始

delete from student // 自增id 会保留 , 108

区别:

1:自增id

2:delete 可以恢复

truncate 无法恢复

2.4 type 列(重点)

"type"列用于表示访问表时所采用的访问类型。

下面是常见的"type"值及其含义:

  1. system: 表示只有一行的表,通常是系统表。

  2. const: 表示通过索引只能匹配到一行数据。 explain select * from student where id = 1688

  3. eq_ref: 表示使用了等值连接(例如,使用主键或唯一索引连接表)。explain SELECT * FROM student s1 JOIN student s2 ON s1.id = s2.id WHERE s1.age = 25;

  4. ref: 表示使用了非唯一索引进行查找,并返回匹配的多行或一行数据。 explain select * from student where name = '张68'

  5. range: 表示使用了索引进行范围查找,例如使用比较符(>, <, BETWEEN)或IN操作符。 explain select * from student where age < 1688

  6. index: 表示全索引扫描,也就是说用了某一个索引的全部, 通常发生在查询使用索引覆盖的情况下。explain select count(*) from student ;explain select sum(age) from student

  7. all: 表示全表扫描,即没有使用索引,需要遍历整个表进行查询。 explain select * from student

相关推荐
码出财富29 分钟前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农2 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪3 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
冷崖8 小时前
MySQL异步连接池的学习(五)
学习·mysql
时序数据说8 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.12 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)12 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺12 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX12 小时前
MySQL的事务日志:
数据库·mysql