数据库面试题总结(持续更新~)

以下题目总结于:牛客网

相关总结:

计算机网络面试题总结

数据结构与算法面试题总结

C/C++面试题总结

设计模式面试题总结

操作系统面试总结

1、请你说一说数据库索引

参考答案:

    索引类似于书本的目录,有了目录,我们不必翻阅整本书,就可以查找到想要的内容模块。

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引的一个主要目的就是加快检索表中数据的方法,亦即能协助信息搜索者尽快的找到符合限制条件的记录 ID 的辅助数据结构。

优点:

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度。

缺点:

  • 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  • 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

 

2、请你说一下数据库事务

参考答案:

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。

事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。

一个逻辑工作单元要成为事务,必须满足所谓ACID(原子性、一致性、隔离性和持久性)特性。

事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功
例如:A——B转帐,对应于如下两条sql语句

update from account set money=money+100 where name='B';

update from account set money=money-100 where name='A';

 

3、请你说一说数据库事务隔离

参考答案:

同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。

比如A 正在从一张银行卡中取钱,在 A 取钱的过程结束前,B不能向这张卡转账。

 

4、请你说一说 inner join  和  left join.

参考答案:

left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 。

right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录。

inner join(等值连接) :只返回两个表中联结字段相等的记录。

 

5、请你说一说数据库事务的四个特性。

参考答案:

事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务是 DBMS中最基础的单位,事务不可分割。

事务具有 4 个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称 ACID

1)原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功,就必须要完全应用到数据库;如果操作失败,则不能对数据库有任何影响。

2)一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

例如:

拿转账来说,假设用户 A 和用户 B 两者的钱加起来一共是 5000,那么不管 A 和B 之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

3)隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

即要达到这么一种效果:对于任意两个并发的事务 T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前就已经结束,要么在 T1 结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。

不同的隔离级别:

  • Read Uncommitted(读取未提交[添加中文释义]内容):最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。
  • Read Committed(读取提交内容):只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
  • Repeated Read(可重复读):在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读。
  • Serialization(可串行化):事务串行化执行,隔离级别最高,牺牲了系统的并发性。可以解决并发事务的所有问题。

4)持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

 

6、请你说一说数据库的三大范式。

参考答案:

第一范式:当关系模式 R的所有属性都不能再分解为更基本的数据单位时,称 R是满足第一范式,即属性不可分。

第二范式:如果关系模式 R 满足第一范式,并且 R 得所有非主属性都完全依赖于 R 的每一个候选关键属性,称 R 满足第二范式。

第三范式:设 R 是一个满足第一范式条件的关系模式,X 是 R 的任意属性集,如果 X 非传递依赖于 R 的任意一个候选关键字,称 R 满足第三范式,即非主属性不传递依赖于键码。

 

 

你可能感兴趣的:(数据库面试题总结)