数据库常见面试题

1. 数据库三范式是什么?

第一范式:表中每个字段都不能再分。
第二范式:满足第一范式并且表中的非主键字段都依赖于主键字段。
第三范式:满足第二范式并且表中的非主键字段必须不传递依赖于主键字段。

2. 什么是数据库事务?

事务具有四大特性:一致性、原子性、隔离性、持久性。
数据库事务是指:几个SQL语句,要么全部执行成功,要么全部执行失败。比如银行转账就是事务的典型场景。
数据库事务的三个常用命令:Begin Transaction、Commit Transaction、RollBack Transaction。

3. 什么是视图?

视图实际上是在数据库中通过Select查询语句从多张表中提取的多个表字段所组成的虚拟表。
视图并不占据物理空间,所以通过视图查询出的记录并非保存在视图中,而是保存在原表中。
通过视图可以对指定用户隐藏相应的表字段,起到保护数据的作用。
在满足一定条件时,可以通过视图对原表中的记录进行增删改操作。
创建视图时,只能使用单条select查询语句。

4. 什么是索引?

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
索引分为:聚集索引、非聚集索引、唯一索引等。
一张表可以有多个唯一索引和非聚集索引,但最多只能有一个聚集索引。
索引可以包含多列。
合理的创建索引能够提升查询语句的执行效率,但降低了新增、删除操作的速度,同时也会消耗一定的数据库物理空间。

5. 什么是存储过程?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。

6. 什么是触发器?

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

7. 什么是数据库约束,常见的约束有哪几种?

数据库约束用于保证数据库表数据的完整性(正确性和一致性)。可以通过定义约束\索引\触发器来保证数据的完整性。
总体来讲,约束可以分为:
主键约束:primary key;
外键约束:foreign key;
唯一约束:unique;
检查约束:check;
空值约束:not null;
默认值约束:default;

8. 什么是内联接、左外联接、右外联接?

内联接(Inner Join):匹配2张表中相关联的记录。
左外联接(Left Outer Join):除了匹配2张表中相关联的记录外,还会匹配左表中剩余的记录,右表中未匹配到的字段用NULL表示。
右外联接(Right Outer Join):除了匹配2张表中相关联的记录外,还会匹配右表中剩余的记录,左表中未匹配到的字段用NULL表示。
在判定左表和右表时,要根据表名出现在Outer Join的左右位置关系。

9、序列的作用

Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

10、表和视图的关系

视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。 表就是关系数据库中实际存储数据用的。

11、oracle基本数据类型

1)字符串类型 char、nchar、varchar、varchar2、nvarchar2 2)数字类型 number、integer 3)浮点类型 binary_float、binary_double、float 4)日期类型 date、 timestamp 5)LOB类型 blob、clob、nclob、bfile

12、truncate与 delete区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。 DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP 放在一起比较:
TRUNCATE TABLE :删除内容、释放空间但不删除定义。
DELETE TABLE: 删除内容不删除定义,不释放空间。

DROP TABLE :删除内容和定义,释放空间。

13. Oracle中function和procedure的区别? 
1). 可以理解函数是存储过程的一种 
2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 
3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程 

4). 在sql数据操纵语句中只能调用函数而不能调用存储过程

14.存储过程与函数的区别

存储过程

函数

用于在数据库中完成特定的操作或者任务(如插入、删除等)

用于特定的数据(如选择)

程序头部声明用procedure

程序头部声明用function

程序头部声明时不需描述返回类型

程序头部声明时要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句

可以使用in/out/in out 三种模式的参数

可以使用in/out/in out 三种模式的参数

可作为一个独立的PL/SQL语句来执行

不能独立执行,必须作为表达式的一部分调用

可以通过out/in out 返回零个或多个值

通过return语句返回一个值,且改值要与声明部分一致,也可以是通过out类型的参数带出的变量

SQL语句(DML 或SELECT)中不可调用存储过程

SQL语句(DML 或SELECT)中可以调用函数

15、视图的优缺点

优点: 1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 

        2 )用户通过简单的查询可以从复杂查询中得到结果。

        3 )维护数据的独立性,试图可从多个表检索数据。 

        4 )对于相同的数据可产生不同的视图。 

缺点: 性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,那么就无法更改数据

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

1.建索引 

2.减少表之间的关联 

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

4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据 

5.尽量用PreparedStatement来查询,不要用Statement

17、order by与group by的区别

order by 排序查询、asc升序、desc降序 group by 分组查询、having 只能用于group by子句、作用于组内,having条件子句可以直接跟函数表达式。使用group by 子句的查询语句需要使用聚合函数。

18、commit在哪里会运用

oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。 执行commit从用户角度讲就是更新到物理文件了,事实上commit时还没有写date file,而是记录了redo log file,要从内存写到data物理文件,需要触发检查点,由DBWR这个后台进程来写,这里内容有点多的,如果不深究的话你就理解成commit即为从内存更新到物理文件。

19、什么是PL/SQL?

PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了 编程 语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。 MySQL 目前不支持 PL/SQL 的。

20、序列的作用

Oracle使用序列来生成唯一编号,用来处理一个表中自增字段。 Oracle序列是原子对象,并且是一致的。也就是说,一旦您访问一个序列号,Oracle将在处理下一个请求之前自动递增下一个编号,从而确保不会出现重复值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库索引是数据库管理系统中的重要概念,面试中经常会涉及与索引相关的问题。以下是一些常见数据库索引面试题及其答案: 1. 什么是数据库索引? 答:数据库索引是一种数据结构,用于快速查找和访问数据库中的数据。它类似于书籍的目录,通过提供键值和对应的数据位置,可以加速数据的检索和查询操作。 2. 为什么使用数据库索引? 答:数据库索引可以大大提高数据的检索效率。它通过创建索引结构,减少了数据库查询时需要扫描的数据量,从而加快了查询速度。索引还可以帮助优化排序、连接和聚合等操作。 3. 哪些列适合创建索引? 答:适合创建索引的列包括经常作为查询条件的列、经常进行连接(JOIN)操作的列、经常进行排序和分组的列,以及唯一性约束列等。对于频繁更新的列,如插入、删除和更新操作较多的列,不宜过多地创建索引。 4. 索引对数据库性能有什么影响? 答:索引可以提高查询性能,加快数据检索速度。但同时也会带来一些负面影响,如增加了存储空间的占用、增加了数据插入、删除和更新的时间开销,以及在维护索引时可能导致的锁竞争问题。因此,在创建索引时需要权衡索引的好处与开销。 5. 请解释聚集索引和非聚集索引的区别。 答:聚集索引(Clustered Index)决定了数据在磁盘上的物理排序顺序,一个表只能有一个聚集索引。非聚集索引(Non-clustered Index)则是基于表中某一列或多列的值创建的索引,它不会改变数据在磁盘上的物理排序顺序,一个表可以有多个非聚集索引。 这些是一些常见数据库索引面试题及其答案,希望对你有帮助!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值