数据库常见面试题(一)

本博客内容:
一、超键、候选键、主键、外键的区别?
二、什么是事务?
三、什么是锁,乐观锁和悲观锁的区别?
四、什么是视图,视图的优缺点?
五、索引的作用?优缺点,什么样的字段适合索引
六、索引的类型有哪些?
七、drop、delete、truncate的区别?
八、数据库的三范式是什么?
九、什么是存储过程,什么来调用,以及有缺点?
十、存储过程与函数的区别?

一、超键、候选键、主键、外键的区别?

参考:https://www.jb51.net/article/80800.htm
https://www.2cto.com/database/201709/685037.html
https://blog.csdn.net/bingqingsuimeng/article/details/51595560
超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性/多个属性组合都可以作为一个超键。超键包含候选键和主键。
候选键:是最小超键,即没有冗余元素的超键。
主键:数据库表中对存储数据对象予以唯一和完整的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(NULL)
外键:在一个表中存在的另一个表的主键称为表的外键。

二、什么是事务?

事务:就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就会失败,以后操作就会回滚到操作前状态,或者是上一个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性、一致性、隔离性和持久性。
  原子性:即不可分割性,事务要么全部执行,要么全部不执行
  一致性:事务的执行使得数据库从一种正确状态转换成另一种正确状态。
  隔离性:在事务正确提交之前,不允许把该事务对数据的任何改变提交给任何其他事务。
  持久性:事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

三、什么是锁,乐观锁和悲观锁的区别?

  在所有的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内部能使用某些数据或数据结构。锁是分级别的。
DBMS中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据的统一性。
乐观锁和悲观锁,是并发控制主要采用的技术手段。
悲观锁:假定会发生并发冲突,屏蔽一些可能违反数据完整的操作。
乐观锁:假定不会发生并发冲突,只在提交操作时检查是否违反数据完整性。

四、什么是视图,视图的优缺点?

视图:一种虚拟的表,具有和物理表相同的功能。
可以对视图进行增、删、改、查操作。视图通常有一个表或者多个表的行或列的子集。
对视图的修改会影响基本表。
它使得我们获取数据更容易,相比多表查询。
优点
 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
 2.用户通过简单的查询可以从复杂查询中得到结果。
 3.维护数据的独立性,视图可以从多个表检索数据。
 4.对于相同的数据,可产生不同的视图。
缺点
 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据。

五、索引的作用?优缺点,什么样的字段适合索引

  索引就是一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。类似于书的目录。不需要查询整本书的内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或多个列。
缺点:减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
唯一、不为空、经常被查询的字段

六、索引的类型有哪些?

逻辑上:
单行索引、多行索引、唯一索引、非唯一索引、函数索引、域索引
物理上:
分区索引、非分区索引、
B-tree:
正常型B树、反转型B树、位图索引

七、drop、delete、truncate的区别?

参考:https://blog.csdn.net/Java_3y/article/details/79441845
drop table
  属于DDL
  不可回滚
  不可带where表
  内容和结构删除
  删除速度快
truncate table
  属于DDL
  不可回滚
  不可带where
  表内容删除
  删除速度快
delete from
  属于DML
  可回滚
  可带where
  表结构在,表内容要看where执行的情况
  删除速度慢,需要逐行删除

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

https://blog.csdn.net/QingKing520/article/details/52937728
共有8个范式,常用的就是前3个范式。
1NF:强调的列的原子性,不能再分成其他列
2NF:首先是满足1NF。另外还要2部分:①、一个表必须有一个主键 ②、没有包含在主键的列必须完全依赖与主键,而不能只依赖于主键的一部分。
3NF:首先是2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列A 依赖于非主键B ,非主键B依赖于主键的情况。
区分依据
2NF:非主键列是否完全完全依赖于主键,还是依赖于主键的一部分
3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列

九、什么是存储过程,什么来调用,以及有缺点?

  存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需要创建一次,以后在该程序中就可以多次使用。如果某次操作需要执行多次SQL,使用存储过程比单纯的SQL语句执行要快。
调用:1.用一个命令对象调用存储过程 2.可以供外部程序调用,如java程序
优缺点
优点:是预编译的,执行效率高。
代码直接放在数据库中通过存储过程名直接调用,减少网络通讯。
安全性高,执行存储过程需要有一定权限的用户。
存储过程可以重复使用,可减少数据开发人员的工作量。
缺点
移植性差

十、存储过程与函数的区别?

这里写图片描述

本博客内容来源于网络,欢迎批评指正,谢谢…

猜你喜欢

转载自blog.csdn.net/xiongluo0628/article/details/81481232