2021-09:mysql数据库面试题整理

这金九银十了,要换工作的赶快了,分享mysql面试题,加薪,加薪。

在这里插入图片描述

mysql数据库面试题整理

背景:#### mysql的架构图
在这里插入图片描述

1、数据库的三范式是什么

第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项

第二范式:在第一范式的基础上,确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键

2、解释一下事务的特点

原子性:事务时最小的执行单位,不可分割。事务的原子型确保动作要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生了错误,就会回滚到事务开始前的状态,就像重来没有执行过一样。

一致性:执行事务前和执行后,数据保持一致,多个事务对同一个数据的读取结果时相同的。比如转账业务,转账完成后,a账户新增的金额=b账户减少的金额=转账金额。

隔离性:并发访问数据库时,一个用户的事务不被其他事务干扰,事务的隔离分为四个级别,读未提交,读提交,可重复读,串行化(序列化)

持久性:事务处理结束后,它对数据库中数据的修改是永久的,即使数据库故障也不应该对其有任何影响。

在这里插入图片描述

在这里插入图片描述

3、说一下数据库的事务隔离

读未提交:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读,幻读,或不可重读读。

读提交:允许读取并发事务已提交的数据,可以阻止脏读,但是幻读和不可重复读仍有可能发生。

可重复读:对同一字段的多次读取结果都是一样的,除非数据是被本身事务自己所修改的,可以阻止脏读和不可重复读,但幻读仍有可能发生。

序列化:最高级别的隔离,所有事务依次逐个执行,该级别可以防止脏读,幻读,不可重复读。
在这里插入图片描述

4、说一下MySQL的InnoDB和MyISAM的区别

InnoDB引擎:msyq5.1后默认的数据引擎,提供了对数据库事务的支持,并且还提供了行级锁和外键的约束,它的设计时处理大数据容量的数据库系统。Mysql运行的时候,InnoDB会在内存中建立缓冲池,用于数据缓冲和索引。但是该引擎不支持全文搜索,同时启动的也比较慢,他是不会保存表的行数,所以当进行select count(*)from table 的时候,需要进行扫描全表,由于锁的粒度小,写操作时不会锁定全表的,所以在并发读较高的场景下使用会提升效率。

MyISAM引擎:不提供事务的支持,也不支持行锁和外键。因此当执行行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和InnoDB不同的时,MyISAM引擎保存了行表数,于是当进行了select count(*)from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作的时候,并且不需要事务的支持,可以选择MyISAM引擎

在这里插入图片描述
在这里插入图片描述

5、说一下MySQL的行锁和表锁?共享锁和排他锁

MyISAM引擎只支持表锁

InnoDB支持表锁和行锁,默认行锁

表锁:表示对当前操作的整张表加锁,特点是开销小,加锁快,不会出现死锁,锁的粒度大,发生冲突的概率最高,并发度最低。

行锁:mysql中锁定粒度最小的锁,只针对当前操作的行进行加锁,特点是开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度最高。行级锁分为共享锁和排他锁

共享锁:又叫读锁,当用户要进行数据读取时,对数据加上共享锁,多个事务对于同一个资源共享一个锁。

排他锁:又叫写锁,当用户要进行写入时,对数据加上排他锁,只允许加锁的这个事务操作被加锁的对象,其他任何事务都不能对这个对象进行任何类型的操作,直到加锁的事务释放了排他锁。排他锁只可以有一个,他和其他的排他锁,共享锁都互斥。

6、如何做SQL优化

在这里插入图片描述

7、什么是索引,有什么特点

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据库中的数据,从而实现高效查询,类似于书籍的目录,通过目录能快速找到想要的内容。

特点:大大的加快数据的查询

缺点:创建索引和维护索引需要耗费时间,对表中数据进行增删改时,索引会对应做出改变,等于降低了增删改的效率

索引本身是一个文件,需要占用磁盘空间

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、mysql中char和verchar的区别

char:定长字符串,长度时固定的

​ 如果插入长度小于char的固定长度,则用空格填充

​ 因为长度固定,存取速度比varchar快很多,时空间换时间的做法,能存255个字符

varchar:可变长度字符串

插入的数据是多长,就按照多长来存储

varchar在存取方面与char相反,它存取慢,因为长度不固定,不占多余空间,是时间换空间的做法,最多能存65532个字符

综合来说,需要性能快就选择char,需要节约磁盘空间就用varchar。

9、索引有那些类型,各有什么特点?

四种类型

主键索引:数据列不允许重复,不允许为null,一个表只能有一个主键所索引

唯一索引:数据列不允许重复,允许为null,一个表允许多个列创建唯一索引

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本内容进行分词搜索。

10、请简述数据库连接池?项目中怎么使用?

连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问,这样省略了创建和销毁连接的过程,提高了系统的性能。

使用:第一次访问的时候创建连接,之后的访问均会复制之前的连接,直接执行sql语句

11、truncate和delete的区别?

都表示删除

dlete属于DML,truncate属于DDL

delete可以回滚,truncate不可以

delete执行后表结构还在,只是删除表中部分数据

truncate执行后表结构还在,但是删除了表中全部数据

delete删除速度慢,需要逐行删除,truncate删除速度快

总结:删除表中部分数据,保留表结构用delete

删除表中全部数据,保留表结构用truncate

12 MySQL的存储引擎是什么

在这里插入图片描述

13.mysq的锁,你说说:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

加油吧!打工人

Guess you like

Origin blog.csdn.net/weixin_55604133/article/details/120039770