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

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

**第二范式(2NF):**要求实体属性完全依赖于主关键字。

**第二范式(3NF):**任何非主属性不依赖于其他非主属性

2、一张自增表里面总共有7条数据,删除了最后2条数据,重启MySQL数据库,又插入了一条数据,此时id是多少?

表类型如果是MyISAM,那么id就是8

表类型如果是InnoDB,那么id就是6

InnoDB表只会把自增的主键的最大Id记录在内存中,所以重启之后会导致最大id丢失

3、如何获取数据库版本

使用select Version()获取当前MySQL数据版本

4、说一下ACID是什么?

Atomicity(原子性):一个事务(transcation)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback0到事务开始前的状态,就像这个事务从来没有执行过一样。即:事务不可分割、不可约简

Consisentecy(一致性):在事务开始之前和结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有预设约束、触发器、级联回滚等

Isolation(隔离性)数据库允许多个并发事务同时对数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于较差执行而导致数据的不一致。事务隔离级别可分为不同级别,包括:读未提交(Read Commited)读提交(Read commited)可重复读(repetable read)和串行化(Serializable)

Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

5、char和varcahr的区别是什么?

char(n):固定长度类型,比如订阅char(10),当你输入"abc"三个字符时候,他们展的空间是10个字节,其他为7个孔子杰

优点:**效率高;**缺点:占用空间;

varchar(n):可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度

所以,从空间上考虑varchar比较合适;从效率上考虑char比较合适

6、float和douvble的区别是什么

float最多可以存储8位的十进制数,并在内存中站4个字节

double最多可以存储16位的十进制数,并在内存中占8字节

7、MySQL的内连接、左连接、右连接有什么区别?

内连接是吧匹配的关联数据显示出来;

左连接是吧左边的表全部显示出来,右面的表显示出符合条件的数据

8、MySQL索引是怎么实现的?

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据

具体来说MySQL中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引是B+树实现的,B+树的搜索效率,可达到二分法的性能,找到数据区域后就找到了完整的数据结构

9、怎么验证MYSQL的索引是否满足需求

使用explain查看sql是如何执行查询语句的,从而分析你的索引是否满足需求

10、说一下事务的隔离界别

MySql数据库面试整理

MySql数据库面试整理

11、说一下MySql常用的引擎?

InnoDB引擎:

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

MyIASM引擎:

  • 不会提供事务的支持,也不支持行级锁和外键
  • 当执行插入和更新语句时,即使执行写操作的时候需要锁定这个表,所以会导致效率较低;
    • 不过和InnoDB不同的是,MyISAM保存了表的行数,于是select count(*) from table语句时,可以直接读取已经保存的值而不需要进行扫描全表

12、说一下MYSQL的行锁 和表锁?

MyISAM只支持表锁,InnoDB支持表锁和行锁,默认为表锁

表级锁: 开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率高,并发量最低

行级锁: 开销大,加锁慢,会出现死锁,锁粒度小,发生锁冲突的概率小,并发度最高*

13、说一下乐观锁和悲观锁?

MySql数据库面试整理

14、MySQL问题排查有哪些手段?

  • 使用show processlist命令查看当前所有连接信息
  • 使用explain命令查询SQL语句执行计划
  • 开启慢查询日志,查看慢查询的sql

15、如何做MySQL的性能优化?

  • 为搜索字段创建索引
  • 避免使用select *,列出需要查询的字段
  • 垂直分割表
  • 选择正确的存储引擎

相关文章: