4.2面试题

发布时间 2023-04-02 16:41:45作者: 小王应该在学习!
面试题

4.2面试题

1 数据库三大范式是什么
2 mysql有哪些索引类型,分别有什么作用
3 事务的特性和隔离级别
第一遍自我理解回答
数据库的三大范式:
数据库的范式:关系型数据库中,数据表设计的基本原则、规则称为范式
1NF:数据库最基本原则------->>!!!属性不可分割
2NF:满足第一范式,且不存在部分依赖
3NF:满足第二范式,且不存在传递依赖

在这里插入图片描述

第二遍自我理解回答
数据库三大范式:
范式:关系型数据库中,数据表设计的基本原则、规则称为范式,是我们在设计数据库中需要遵循的规则和方法
1NF:最基本的原则,属性不可再分割
    必须确保数据表中每个字段的值具有原子性,就是数据表中某个字段的值是不可拆分最小数据单元
    
2NF:满足第一范式,且不存在部分依赖
    在满足第一范式的基础上,还要满足表里的每条数据记录,都是可唯一标识的,而且非主键字段必须完全依赖主键,不能只依赖主键的部分
    
3NF:满足第二范式,且不存在传递依赖
    在满足第二范式的基础上,数据表中的所有非主键字段不能依赖其他非主键字段(意思就是所有的非主键之间不能有依赖关系,他们是互相独立的)
第一遍自我理解回答
mysql有哪些索引类型,分别有什么作用
索引:对于数据库中的一行或者多行值进行排序的一种结构------->>可以加快检索表中的数据
索引类型:
逻辑区分:
1.普通索引:最基本的索引类型,---->他没有唯一性之类的限制,仅用来加速查询
2.全文索引:用来查找文本中的关键字
3.唯一索引:唯一索引列的值必须唯一,允许有空值,目的是为了避免数据出现重复,创建唯一索引通常使用unique关键字
4.主键索引:主键索引是特殊的唯一索引,不允许值重复或者值为空
5.空间索引:对于空间数据类型的字段建立的索引,使用spatial关键字进行扩展,很少用到

存储方式区分:
1.哈希索引:可以根据索引列对应的哈希值的方法获取表的记录行
		  哈希索引可以一次定位,不需要像树索引一样逐层查找,高效是在“=”和“in”的条件下高效的
2.B-树索引:又称BTREE索引,目前大部分的索引都是采用B-树索引

实际使用区分:
1.单列索引:单列索引就是索引包含原表的一个列,在表中单个字段上创建索引
          单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段即可。
例:CREATE INDEX index_addr ON tb_student(address(4));
2.多列索引:也叫组合索引或者多列索引,,是将原表的多个列共同组合成一个索引,在表的多个字段上创建索引
B-树索引
B-树索引是一个典型的数据结构,其包含的组件有以下几个:
叶子节点:包含的条目直接指向表里的数据行,叶子节点之间彼此相连,一个叶子节点有一个指向下一个叶子节点的指针
分支节点:包含的条目指向索引里其他分支节点或者叶子节点
根节点:一个B-树索引只有一个根节点,实践上就是位于树的最顶端的分支节点

基于这种树形数据结构,表中的每一行都会在索引上有一个对应值。因此,在表中进行查询的时候,可以根据索引值一步一步定位到数据所在行
第一遍自我理解回答

img

事务的特性和隔离级别
事务的四大特性:
原子性:数据库中的事物执行是作为原子粒度,即不可再分,整个语句要么执行,要么不执行
一致性:事物开始之前和事物结束以后,数据库的完整性约束没有被破坏
隔离性:事物的执行是互不干扰的
永久性:该事物对于数据库所作的更改是永久保存到数据库中的,不会回滚
事务的并发问题:
1.脏读:事物A读取了事物B更新的数据,然后B进行了回滚,A读取到的数据是脏数据
2.不可重复读:事物A多次读取同一数据,事物B 在A读取的过程中对数据进行了更新并提交,导致A多次读取同一数据时,结果不一致
3.幻读:指的是一个事物在前后两次查询同一个范围的时候,后一个查询看到了前一次没有看到的行
(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。)

不可重复读和幻读很容易混淆的,不可重复读侧重于修改,幻读侧重于新增或者删除
不可重复读------》》解决需要锁满足条件就好了
幻读--------》》解决幻读需要表锁

!!!Innodb存储引擎已解决幻读
MySQL事务隔离级别:
读取未提交:最低的隔离级别,允许读取尚未提交的数据变更,可能造成脏读,不可重复读,幻读

读取已提交:允许读取并发事物已经提交的数据,可以避免脏读,但是可能造成不可重复读,幻读

可重复读:对于同一字段多次读取的结果都是一致的,除非本身事物修改,可避免脏读和不可重复读,但是可能会造成幻读
    
可串行化:最高的隔离级别,完全服从隔离级别,所有的事物依次执行,可以避免脏读、不可重复读、幻读

image