数据库面试题

1、数据库有哪些索引?

根据功能分类

唯一索引(Unique):可单列也可多列组合,每个索引值对应唯一的记录,且索引的字段具有唯一性,最多只能有一个NULL。

主键索引(Primary Key):可单列也可多列组合,其值唯一标识表中的一行,不能为NULL。

聚集索引(Cluster):一个表只能包含一个聚集索引,表中行的物理顺序与键值的逻辑顺序相同,加快查询速度。

根据实现方式分类

B+树索引:平衡的树,不一定是二叉树,一个节点中可以存多个值或者指针,最常用,性能好,范围查询和单查询都适用。

散列索引:通过散列函数来定位,只支持单值查询,单值查询比B+树略快。

位图索引:适用于字段值固定且值的种类很少的情况。


2、MySQL的数据引擎有哪些?特点?

ISAM:读取数据快,不支持事务、索引、容错。

MyISAM:基于ISAM,表格锁定机制优化并发读写,静态型(不含varchar等长度可变数据类型)、动态型(含长度可变数据类型)、压缩型(若只含只读表课减少存储空间)。

HEAP:每个表对应一个磁盘文件,表结构存在磁盘,数据存在内存。

CSV:基于普通文本文件,每个数据行占一个文本行。

BLACKHOLE:用作日志记录。

ARCHIVE:提供压缩功能,适合存储大量的独立的历史数据,插入速度快,无索引查询慢。

PERFORMANCE SCHEMA:用于收集数据库服务器的参数。

InnoDB:提供ACID事务支持、系统奔溃修复能力、多版本并发控制的行级锁、支持自增长列、外键,为5.5之后的默认引擎。

3、数据库连接池采用了什么设计模式?有什么意义?

单例模式:全局只有且仅需要一个数据库连接池对象。

创建者模式——对象池模式:一个缓存对象的对象池类Pool,创建好固定数量的抽象对象,提供取对象、返还对象的功能。

装饰者模式或代理模式:使得close方法不再是关闭连接而是返还连接给数据库连接池。


4、数据库事务ACID特性?

(1)原子性:整个事务的操作看成一个操作,要么全部完成,要么全部不完成,事务发生异常会回滚。

(2)一致性:从一个一致的状态到另一个一致的状态,转账后总额不变。

(3)隔离性:隔离状态执行事务,使它们好像是系统在给定时间执行的唯一操作。

(4)持久性:事务对数据库所作的更改持久化在数据库中不会回滚。


5、数据库的隔离特性?

(1)脏读:事务处理过程中读取了 另一个 未提交的的事务中的数据。

(2)不可重复读:一个事务范围内多次查询返回了不同的数据,查询间隔内被另一个事务修改并提交了。

(3)幻读(虚读):T1对某列进行更新操作,另一个事务T2插入一行,T1看到有一行未被更新。

四种隔离级别:

Serializable(可串行化):可避免脏读、不可重复读、幻读,是表锁。

Repeatable read(可重复读):可避免脏读、不可重复读。

Read committed(读已提交):可避免脏读。

Read uncommited(读未提交):最低级别,任何情况都不能保证。


6、数据库的范式?

第一范式:每一列都是原子的,不可分割的。

第二范式:每一条记录都是唯一的,且不存在部分依赖。

第三范式:不存在可传递依赖。

你可能感兴趣的:(数据库,数据库面试题,面试题,数据库,数据库基础,Java面试)