面试题-Java基础(十七)- Mysql

1、数据库的三范式? 详解

  • 第一范式:强调列的原子性,及数据库的每一列都是不可以分割的原子数据项。
  • 第二范式:要求数据库表中的每行必须可以被唯一 区分,存在多主键的情况下,不可以存在某属性值依赖于其中一个数据主键。
  • 第三范式:要求一个数据表不包含已在其他表中存在的非主键字段。

反三范式:有时候会为了提高读取性能,通过用空间换时间的方式,适当的保留冗余字段。

2、一个自增表中总共有17条数据,删除最后两条以后,重启mysql数据库,再插入一条数据的时候,该数据的id是?

需要区分数据库引擎:

  • MyISAM  id是18
  • InnoDB,id是15 ,InnoDB 只会把自增主键的最大值记录在内存中,所以重启之后会导致最大ID丢失。

3、如何获取当前数据库的版本?

4、说一下ACID是什么?

指的是事务的特性:

  • Atomicity 原子性:指一个事务中所有操作,或者全部完成,或者全部不完成。
  • Consistency 一致性:一个事务执行完成,数据库从一个正确的状态转换成另一个正确的状态
  • Isolation 隔离性:多事务并发情况下,事务之间不相互影响,存在四种事务隔离级别
  • Durability 持久性:事务处理结束后,对数据的修改是永久的

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

  • char(n):固定长度,实际存储字节不足的时候,会存在空字节。char的效率高,但是浪费空间。比较适合存储邮政编码的
  • varchar(n):可变长度,所占空间以实际存储字节为准

6、float和double的区别?

  • float : 占四个字节,最多可以存储8位十进制数
  • double:占八个字节,最多可以存储16位十进制数

7、mysql的索引是怎么实现的?索引的数据结构

mysql通过B+ Tree 进行数据存储的。

8、说一下数据库的事务隔离级别

  • 读取未提交
  • 读取已提交
  • 可重复读
  • 串行化

9、说一下mysql常用的引擎? 详解

10、说一下mysql行锁和表锁?

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

  • 表级锁:开销小,加锁快,不会出现死锁,锁定的粒度大,发生锁冲突的概率高,并发量低。
  • 行级锁:开销大,加锁慢,存在死锁的情况,锁定的粒度小,发生锁冲突概率小,并发量高。

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

  • 乐观锁:每次去拿数据的时候,都默认别人不会修改这个数据,所以不会上锁,但是在提交更新的时候,回去判断一下在此期间有没有人去更新这个数据。
  • 悲观锁:每次去拿数据的时候,都默认别人会修改这个数据,所以都会上锁,这样就会阻止其他人修改该数据,直至锁被释放。

数据库的乐观锁需要自己实现,在表中添加一个version字段,每次修改成功值加1,每次提交更新的时候会先去对比一下自己拥有的version和数据库的version是否一致。

12、mysql问题排查都有哪些手段?

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

13、如何进行mysql的性能优化

  • 优化执行sql
  • 表结构设计
  • 存储引擎的选择

14、mysql中对于null值的判断。

  • = null 任何情况下,对于null 进行<,>,=,!=等判断,返回值都是false
  • is null 只可以对于那些,设置了默认值为空的字段进行 为空 判断,Ent_Name 不可以用is null 判断,但是 Bak_1,Bak_2...是可以用 is null 来判断的。

 

下一节 redis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值