Java数据库面试题及答案(11道最常问必考题)

Java数据库面试题及答案(11道最常问必考题)-mikechen

Java数据库面试题经常在Java面试题中被问到,下面重点详解常见的Java数据库面试题及答案。

数据库事务隔离级别有哪些?

数据库事务的隔离级别主要是四种:读未提交、读已提交、可重复读、串行化。

如下图所示:

Java数据库面试题及答案(11道最常问必考题)-mikechen

读未提交(Read Uncommitted)

事务的修改,即使没有提交,对其他事务也都是可见的。这种等级下会出现脏读、不可重复读、幻读。

读已提交(READ-COMMITTED)

事务读取已提交的数据,大多数数据库的默认隔离级别。当一个事务在执行过程中,数据被另外一个事务修改,造成本次事务前后读取的信息不一样。这种等级下会出现、不可重复读、幻读。

可重复读(REPEATABLE-READ )

这个级别是MySQL的默认隔离级别,它解决了脏读的问题,同时也保证了同一个事务多次读取同样的记录是一致的,但这个级别还是会出现幻读的情况。

序列化(SERIALIZABLE )

最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,该级别可以防止脏读、不可重复读以及幻读。

 

数据库设计三大范式?

在实际开发中最为常见的设计范式有三个:

​ 1.第一范式:确保每列保持原子性,所有字段值都是不可分解的原子值;

2.第二范式:确保表中的每列都和主键相关,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;

​ 3.第三范式:确保每列都和主键列直接相关,而不是间接相关;

满足最 低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多规范要求的称为 第二范式(2NF),其余范式以此类推。

一般来说,数据库只需满足第三范式(3NF)就行 了。

简单来说:

第一范式:列表字段不可分;

第二范式:有主键且非主键依赖主键;

第三范式:非主键字段不能相互依赖。

 

MySQL索引主要有哪些?

MySQL索引类型主要分为:​​主键索引​​​、​​唯一索引​​​、​​普通索引​​​和​、全文索引。​

1.MySQL主键索引

主键索引,英文全称Primary Key,简称为主键,主键是一种唯一性索引,每个表只能有一个主键。

alert table tablename add primary key(`字段名`)

 

2.MySQL普通索引

普通索引(index)顾名思义:就是各类索引中最为普通的索引。

alter table table_name add index(`字段名`);

 

3.MySQL唯一索引

mysql中唯一索引的关键字是unique index,唯一索引可以有多个,但索引列的值必须唯一,索引列的值允许有空值。

alter table 表名 add unique(列名)

业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。

 

4.MySQL全文索引

全文索引指的是:将存储在数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。

alter table 表名 add fulltext (列名)

全文索引只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。

 

事务四大特性?

事务应该具有4个属性:原子性、一致性、隔离性、持久性,这四个属性通常称为ACID特性。

  1. 原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行;
  2. 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的;
  3. 隔离性:多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离;
  4. 持久性:表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。

 

在数据库中查询语句速度很慢,如何优化?

① 建立索引;

② 减少表之间的关联;

③ 优化sql语句,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的排在前面;

④ 简化查询字段,没用的字段不要;

⑤ 尽量用PreparedStatement来查询,不要用Statement。

 

SQL和MySQL有什么区别?

SQL是一种特定于域的语言,用于管理,检索和操作结构化数据库, MySQL是一个关系数据库管理系统。

 

什么是数据库索引?

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库中表的数据。

类似书籍的目录,如下图所示:

Java数据库面试题及答案(11道最常问必考题)-mikechen

通过创建索引,可以在查询的过程中,提高系统的性能。

 

什么是子查询?

当一个查询结果是另一个查询的条件的时候,那么就称为子查询,子查询是在SQL语句内的另外一条SELECT语句。

 

什么时候要创建索引?

(1)表经常进行 SELECT 操作;

(2)表很大(记录超多),记录内容分布范围很广;

(3)列名经常在 WHERE 子句或连接条件中出现。

 

有哪些不同类型的联接?

有四种不同类型的联接,如下图所示:

Java数据库面试题及答案(11道最常问必考题)-mikechen

分别是:内部联接(Inner Join)、左连接(Left Join)、右连接(Right Join)、完全连接(Full Join)。

 

MySQL 架构

如下图所示

Java数据库面试题及答案(11道最常问必考题)-mikechen

大致上来说,MySQL 可以分为 Server层和 存储引擎层。

Server 层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数 MySQL 中的核心功能。

所有跨存储引擎的功能也在这一层实现,包括 存储过程、触发器、视图等

以上就是常见的Java数据库面试题及答案解析,更多的Java面试题及答案,请查看:1000+Java面试题及答案详解

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法