数据库 必会面试题

试述数据、数据库、数据库管理系统、数据库系统的概念。
数据:描述食物某一方面的符号记录
数据库:指长期存储在计算机内有组织可共享的大量数据的集合
数据库管理系统:是位于用户和操作系统之间的一层软件管理系统
数据库系统:指计算机引入数据库后,由数据库系统运行环境,数据库管理系统及开发工具,数据库管理员以及用户组成的系统。

使用数据库系统有什么好处?
1.可以大大提高系统开发效率,因为在数据库系统中,应用程序不必关心数据的定义,存储,以及存取路径,这些都有DBMS完成
2.提供数据与程序之间的独立性:大大减少应用程序的维护和修改
3.使用数据库可以减少数据库管理人员的工作负担

试述文件系统与数据库系统的区别和联系。
文件系统和数据库系统之间的区别:
(1) 文件系统用文件将数据长期保存在外存上,数据库系统用数据库统一存储数据;
(2) 文件系统中的程序和数据有一定的联系,数据库系统中的程序和数据分离;
(3) 文件系统用操作系统中的存取方法对数据进行管理,数据库系统用DBMS统一管理和控制数据;
(4) 文件系统实现以文件为单位的数据共享,数据库系统实现以记录和字段为单位的数据共享。

文件系统数据库管理系统
某一应用现实世界
共享性差,冗余度大共享性高,冗余度小
记录内有结构,整体无结构整体结构化,用数据模型描述
应用程序自己控制由数据库管理系统提供数据安全性,完整性,并发控制和恢复能力
独立性差具有高度的物理独立性和一定的逻辑独立性
文件系统和数据库系统之间的联系:
(1) 均为数据组织的管理技术;
(2) 均由数据管理软件管理数据,程序与数据之间用存取方法进行转换;
(3) 数据库系统是在文件系统的基础上发展而来的。
举出适合用文件系统而不是数据库系统的应用例子,以及适合用数据库系统的应用例子。
适用于文件系统:数据的备份,应用程序使用过程中产生的临时数据,本身功能简单,结构固定的应用都适合用于文件系统。 适用于数据库系统:绝大部分现实情形都可以使用数据库系统。例如公司的信息管理系统,学校的图书馆管理系统等

数据库的数据保护都有哪些?怎么实现的?
有防止非法使用数据库,造成的数据泄露,更改或破坏;
防止多个用户同时存取同一数据,造成的数据不一致。
可通过四方面实现:
安全性控制
完整性控制
并发性控制
数据恢复。

关系数据库有哪些操作
选择、投影、连接、除法

数据库系统相对于文件系统的好处

  1. 数据结构化,并由DBMS同一管理
  2. 具有较高的数据独立性
  3. 数据的共享性更好

数据库有哪些数据模型
层次模型 网状模型 关系模型 对象关系模型 对象模型

数据库的第三范式
3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余

数据库的设计过程
需求分析阶段
概念结构设计
逻辑结构设计
物理结构设计
数据库实施
数据库运行和维护


数据库系统和文件系统相比有哪些优势

  1. 提高了数据的共享性,使多个用户能够同时访问数据库中的数据

  2. 提高了数据的一致性和完整性

  3. 提供数据与应用程序的独立性
    文件系统和数据库系统之间的区别

    文件系统数据库系统
    用文件将数据长期保存在外存上用数据库统一存储数据
    程序和数据有一定的联系程序和数据分离
    用操作系统的存取方法对数据进行管理用DBNS统一管理和控制数据
    以文件为单位的数据共享以记录和字段为单位的数据共享

    文件系统和数据库系统之间的联系

    1. 均为数据组织的管理技术
    2. 均由数据管理软件管理数据,程序和数据之间用存取方法进行转换;
    3. 数据库系统在文件系统的基础上发展而来

数据库设计过程(6个步骤)

  1. 需求分析
  2. 概念结构设计
  3. 逻辑结构设计
  4. 物理结构设计
  5. 数据库实施
  6. 数据库的运行和维护

云计算
云计算是通过网络提供可伸缩的廉价分布式计算能力。
云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够更具获取计算力、存储空间和信息服务。提供资源的网络被称作云。云中的资源在使用者看来是可无限扩展的,并且可以随时获取、按需使用、随时扩展、按使用付费,就像煤气水电一样,取用方便
、费用低廉。

普适计算
通过在日常环境中广泛部署微小的计算设备,人们能够在任何时间和任何地点获取并处理信息,计算将最终和环境融为一体。这就是普适计算。

UML
统一建模语言(UML,Unified Modeling Language)是面向对象软件的标准化建模语言。UML因其简单、统一的特点,而且能表达软件设计中的动态和静态信息,目前已经成为可视化建模语言的工业标准,

- 组成
 模型元素(Model Element):代表面对对象中的类、对象、消息和关系等概念,是构成图的最基本的长面向对象系统分析与设计方法概念。
 图(Diagram):是模型元素集的图形表示,通常是由弧(关系)和顶点(其他模型元素)相互连接构成的。
 视图(View):是表达系统的某一方面的特征的UMI,建模元素的子集,由多个图构成,是在某一个抽象层上,对系统的抽象表示。
 通用机制(General Mechanism):用于表示其他信息,比如注释、模型元素的语义等。另外,UMI。还提供扩展机制,使UML语言能够适应一个特殊的方法(或过程),或扩充至一个组织或用户。
 - 五种类图定义
 1.用例图:从用户角度描述系统功能,并指各功能的操作者。
 2.静态图:包括类图,包图,对象图。
    - 类图:描述系统中类的静态结构
    - 包图:是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构.
    - 对象图:是类图的实例.
 3.行为图:描述系统动态模型和对象组成的交换关系。包括状态图和活动图
   - 活动图:描述了业务实现用例的工作流程
   - 状态图:是描述状态到状态控制流,常用于动态特性建模
 4.交互图:描述对象之间的交互关系
	顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互
	合作图:描述对象之间的协助关系
5.实现图:
	配置图:定义系统中软硬件的物理体系结构

完整性约束

  • 关系完整性约束是为保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。
  • 实体完整性约束指一个关系中所有主属性(即主码的属性)不能取空值
  • 参照完整性要求关系中不允许引用不存在的实体。又称引用完整性。
  • 用户定义完整性用户定义某个具体数据库所涉及的数据必须满足的约束条件,是由具体应用环境来决定的。例如,约定学生成绩的数据必须小于或等于100。

数据库事务ACID四大属性,事务的概念

  • 事务(Transaction)指要做的或所做的事情。在计算机属于中指访问并可能更新数据库中各种数据项的一个程序执行单位(unit)。

  • 事务是恢复和并发控制的基本单位。

  • 事务4个属性:原子性、一致性、隔离性、持久性。这四个属性常称为ACID特性。

    原子性(atomicity):一个事务是一个不可分割的单位,事务中包括的诸操作要么都做,要么都不做。
    一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation):一个事务的执行不能被其他事物干扰。即一个事务内部的操作及使用的数据对并发的其他事物是隔离带,并发执行的各个事物之间不能互相干扰。
    持久性(durability):又称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性高度。接下来的其他操作或故障不应该对其有任何影响。
    

ER模型
全称实体关系模型(Entity-relationship model)
提供不受任何DBMS约束的面向用户的表达方法,在数据库设计中被广泛用作数据建模的工具。
主要有实体、属性、联系三部分组成。

- 实体是一个数据的使用者,其代表软件系统中客观存在的生活中的实物,如人、动物,物体、列表、部门、项目等。
- 实体中的所有特性称为属性.如用户有姓名、性别、住址、电话等. "实体标识符"是在一个实体中,能够唯一表示实体的属性和属性集的标示符.但针对于一个实体只能使用一个"实体标识符"来标明。实体标识符也就是实体的主键。属性用椭圆型的符号现况表示出来,添加了下划线的名字就是我们所说的标识符。
- 在我们生活的世界中,实体不会是单独存在的,实体和其他的实体之间是有着千丝万缕的联系的。举例某一个人在公司的某个部门工作,其中的实体有"某个人"和"公司的某个部门",他们之间的有着很多的联系联系。

在这里插入图片描述
存储过程(stored Procedure)

  • 是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行它。存储过程是数据库中的一个重要对象。
    相当于数据库中的函数。

      类比:假如你每天要开车完成一些列重复的操作:车钥匙启动车,倒车。现在出现了一款新车,可以自动的完成这些重复的工作。每次你上车以后,车就自动帮助你倒出来了。
      在工作里也会经常遇到重复性的工作,这时候就可以把常用的SQL写好存储起来,这就是存储过程。这样下次遇到同样的问题,直接使用存储过程就可以了,就不需要再重新写一遍SQL
    
  • 用什么来调用
    1)可以用一个命令对象来调用存储过程。
    2)可以供外部程序调用,比 如:java 程序。

  • 存储过程优缺点
    优点
    1)存储过程是预编译过的,执行效率高。
    2)存储过程的代码直接存放于数据库中,通过存储过程名直接调用,减少网络通讯。
    3)安全性高,执行存储过程需要有一定权限的用户。
    4)存储过程可以重复使用,可减少数据库开发人员的工作量。
    缺点: 移植性差

  • 存储过程和函数的区别

    存储过程函数
    用于在数据库中完成特定的操作或者任务(如插入、删除等)用于特定的数据(如选择)
    程序头部声明用procedurefunction
    程序头部声明时不需要描述返回类型要描述返回类型而且PL/SQL块中至少要包括一个有效的return语句
    可以使用 in/out/in out 三种模式的参数可以使用 in/out/in out 三种模式的参数
    可作为一个独立的 PL/SQL 语句来 执行不能独立执行,必须作为表达式的一部分调用
    可以通过 out/in out 返回零个或多 个值通过 return 语句返回一个值,且改值要与声明部分 一致,也可以是通过 out 类型的参数带出的变量
    SQL 语句(DML 或 SELECT)中不可调用存储过程SQL 语句(DML 或 SELECT)中可以调用函数
  • 使用存储过程需要:
    1)先定义存储过程
    2)使用已经定义好的存储过程

  • 分表:针对每个时间周期产生大量的数据,可考虑采用一定的策略将数据存到多个数据表中

  • 分库:将系统按照模块相关的特征分布到不同的数据中,以提高系统整体的负载能力

  • 数据库笛卡尔问题:数据库表连接数据,使用叉乘的方法

范式
范式是符合某一种级别的关系模型的集合。关系数据库中的关系必须满足一定更多要求。

  • 第一范式(1NF):
    数据库中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑性、日期型等。

    定义:如果一个关系模式 R 的所有属性都是不可分的基本数据项,则 R 属于 1NF。
    例如,下面的数据库表是符合第一范式的:字段 1 字段 2 字段 3 字段 4 
    而这样的数据库表是不符合第一范式的:字段 1 字段 2 字段 3 字段 4 字段 3.1 字段 3.2
    很显然,在当前的任何关系数据库管理系统(DBMS)中,谁也不可能做出不符合第 一范式的数据库,因为这些 DBMS 不允许你把数据库表的一列再分成二列或多列。因此,想 在现有的 DBMS 中设计出不符合第一范式的数据库都是不可能的。
    
  • 第二范式(2NF):
    数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。

    假定选课关系表为 SelectCourse(学号,姓名,年龄,课程名称,成绩,学分),
       关键字 为组合关键字(学号,课程名称),
    因为存在如下决定关系: 
     (学号,课程名称) → (姓名,年龄,成绩,学分) 这个数据库表不满足第二范式,
     因为存在如下决定关系:
      (课程名称) → (学分)
      (学号) → (姓名,年龄) 
     即存在组合关键字中的字段决定非关键字的情况。
     由于不符合 2NF,这个选课关系表会存在如下问题:
     (1) 数据冗余: 同一门课程由 n 个学生选修,"学分"就重复 n-1 次;同一个学生选修了 m 门课程,姓 名和年龄就重复了 m-1 次。
     (2) 更新异常: 若调整了某门课程的学分,数据表中所有行的"学分"值都要更新,否则会出现同一门 课程学分不同的情况。
     (3) 插入异常: 假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课 程名称和学分也无法记录入数据库。 
     (4) 删除异常: 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是, 与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
      
    把选课关系表 SelectCourse 改为如下三个表: 
      学生:Student(学号,姓名,年龄); 
      课程:Course(课程名称,学分); 
      选课关系:SelectCourse(学号,课程名称,成绩)。
    这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。
    另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。
    

第三范式(3NF)
在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在"A → B → C"的决定关系,则 C 传递函数依赖于 A。因此,满足第三范式的数据库表应该不存在如下依赖关系:关键字段 → 非关键字段 x → 非关键字段 y

 假定学生关系表为 Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一关键字"学号",因为存在如下决定关系:
 (学号) → (姓名,年龄,所在学院,学院地点,学院电话) 这个数据库是符合 2NF 的,但是不符合 3NF,
 因为存在如下决定关系: (学号) → (所在学院) → (学院地点,学院电话) 
 即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。
 它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。
 
 把学生关系表分为如下两个表: 
   学生:(学号,姓名,年龄,所在学院); 
   学院:(学院,地点,电话)。 
 这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。

鲍依斯-科得范式(BCNF)
在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。

假设仓库管理关系表为 StorehouseManage(仓库 ID,存储物品 ID,管理员 ID,数量),且有一个管理员只在一个仓库工作,一个仓库可以存储多种物品。
这个数据库表中存在如下决定关系: 
   (仓库 ID,存储物品 ID) →(管理员 ID,数量)
   (管理员 ID,存储物品 ID) → (仓库 ID,数量) 
所以(仓库 ID,存储物品 ID)和(管理员 ID,存储物品 ID)都是 StorehouseManage 的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系: 
   (仓库 ID) → (管理员 ID) 
   (管理员 ID) → (仓库 ID) 
即存在关键字段决定关键字段的情况,所以其不符合 BCNF 范式。
它会出现如下异常情况: 
(1) 删除异常: 当仓库被清空后,所有"存储物品 ID"和"数量"信息被删除的同时,"仓库 ID"和"管理员 ID"信息也被删除了。 
(2) 插入异常: 当仓库没有存储任何物品时,无法给仓库分配管理员。 
(3) 更新异常: 如果仓库换了管理员,则表中所有行的管理员 ID 都要修改。 把仓库管理关系表分解为二个关系表: 
    仓库管理:StorehouseManage(仓库 ID,管理员 ID); 
    仓库:Storehouse(仓库 ID,存储物品 ID,数量)。 
    这样的数据库表是符合 BCNF 范式的,消除了删除异常、插入异常和更新异常。

在这里插入图片描述

三级模式

  • 外模式
    外模式又称子模式或用户模式,对应于用户级。它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。
    外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观
  • 概念模式
    概念模式又称模式或逻辑模式,对应于概念级。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是对数据库中全部数据的逻辑结构和特征的总体描述,是所有用户的公共数据视图(全局视图)。
    它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观
  • 内模式
    内模式又称存储模式,对应于物理级。它是数据库中全体数据的内部表示或底层描述, 是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观
    在一个数据库系统中,只有唯一的数据库, 因而作为定义 、描述数据库存储结构的内模式和定义、描述数据库逻辑结构的模式,也是唯一的,但建立在数据库系统之上的应用则是非常广泛、多样的,所以对应的外模式不是唯一的,也不可能是唯一的。

自主存储控制和强制存储控制区别

  • 自主访问控制:
    由客体的属主对自己的客体进行管理,由属主自己决定是否将自己的客体访问权或部分访问权授予其他主体,这种控制方式是自主的。也就是说,在自主访问控制下,用户可以按自己的意愿,有选择地与其他用户共享他的文件。
    自主访问控制是保护系统资源不被非法访问的一种有效手段。但是这种控制是自主的, 即它是以保护用户的个人资源的安全为目标并以个人的意志为转移的。
    自主访问控制是一种比较宽松的访问控制,一个主题的访问权限具有传递性。其强调的是自主,自己来决定访问策略,其安全风险也来自自主
  • 强制访问控制:
    用户的权限和客体的安全属性都是系统管理员人为设置,或由操作系统自动地按照严格的安全策略与规则进行设置,用户和他们的进程不能修改这些属性。 其强调是强制由系统来决定

公共秘钥和传统秘钥的区别和优势

  • 公共密钥密码术利用两个密钥取代常规的一个密钥:
    一个公共密钥被用来加密数据
    而另一个私人密钥被用来解密数据
    这两个密钥在数字上相关,但是即便使用许多计算机协同运算,要想从公共密钥中逆算出对应的私人密钥也是不现实的。 发送和接收数据的双方,使用相同的或对称的密钥对明文进行加密解密运算的加密方法。

  • 传统密码的缺点:
    (1)收发双方持有相同密钥,密钥分配困难。KE=KD
    (2)不能方便的实现数字签名,应用不方便。(数字签名概念下面有)

    数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上 的普通的物理签名,但是使用了公钥加密领域的技术来实现 的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称密钥加密技术与数字摘要技术的应用。
    
  • 与传统加密方法相比,公共密钥加密系统具有以下三个比较突出的优点
    ①用户可以把用于加密的密钥,公开地分发给任何用户

    谁都可以使用这把公共的加密密钥与该用户秘密通信。除了持有解密密钥的收件方用户外,没有人能够解开密文。这样,传统加密方法中令人头痛的、代价沉重的密钥分发问题就转变为一个性质 完全不同的公共密钥分发问题。
    

    ②公共密钥加密系统允许用户事先把公共密钥发表或刊登出来

    例如,用户可以把它和电话号码、产品说明等一起刊登出来,让任何人都可以查找并使用。这使得公共密钥应 用的范围不再局限于信息加密,还可以应用于身份鉴别、权限区分等各种领域。例如, 大家熟知的各种应用软件,如 Windows 95/98 等系统安装时需要的产品序列号,其实就是公共密钥,它通常印在产品授权书的封面或封底上,供安装时鉴别用户的授权身份。 
    

    ③公共密钥加密不仅改进了传统加密方法,而且还提供了传统加密方法所不具备的应用,即数字签名的公开鉴定系统

orm
对象-关系映射(OBJECT/RELATIONALMAPPING,简称 ORM),是随着面向对象的软件开发方法发展而产生的。用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的 SQL语句打交道,只需简单的操作实体对象的属性和方法。ORM 技术是在对象和关系之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化 。

Sql 优化

  1. 在表中建立索引,优先考虑 where、group by 使用到的字段。

  2. 尽量避免使用 select * ,返回无用的字段会降低查询效率。

    SELECT * FROM t 
    

    优化方式:使用具体的字段代替*,只返回使用到的字段

  3. 尽量避免使用 in 和 not in,会导致数据库引擎放弃索引进行全表扫描。

    SELECT * FROM t WHERE id IN (2,3) 
    SELECT * FROM t1 WHERE username IN (SELECT username FROM t2) 
    

    优化方式:
    如果是连续数值,可以用 between 代替

    如下: SELECT * FROM t WHERE id BETWEEN 2 AND 3
    如果是子查询,可以用 exists 代替

    如下: SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)

  4. 尽量避免使用or,会导致数据库引擎放弃索引进行全表扫描

    SELECT * FROM t WHERE id = 1 OR id = 3 
    

    优化方式:可以用 union 代替 or。如下:

    SELECT * FROM t WHERE id = 1 UNION SELECT * FROM t WHERE id = 3 (PS:如果 or 两边的字段是同一个,如例子中这样。貌似两种方式效率差不多,即使 union 扫描的是索引,or 扫描的是全表)
    
  5. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下:

    SELECT * FROM t WHERE username LIKE '%li%' 
    

    优化方式:尽量在字段后面使用模糊查询。如下:

    SELECT * FROM t WHERE username LIKE 'li%
    
  6. 尽量避免进行 null 值的判断,会导致数据库引擎放弃索引进行全表扫描。如下:

    SELECT * FROM t WHERE score IS NULL 
    

    优化方式:可以给字段添加默认值 0,对 0 值进行判断。如下:

    SELECT * FROM t WHERE score = 0
    
  7. 尽量避免在 where 条件中等号的左侧进行表达式、函数操作,会导致数据库引擎放弃索 引进行全表扫描。如下:

    SELECT * FROM t2 WHERE score/10 = 9 SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li' 
    

    优化方式:可以将表达式、函数操作移动到等号右侧。如下:

    SELECT * FROM t2 WHERE score = 10*9 SELECT * FROM t2 WHERE username LIKE 'li%' 
    
  8. 当数据量大时,避免使用 where 1=1 的条件。通常为了方便拼装查询条件,我们会默认 使用该条件,数据库引擎会放弃索引进行全表扫描。如下:

    SELECT * FROM t WHERE 1=1 
    

    优化方式:用代码拼装 sql 时进行判断,没 where 加 where,有 where 加 and。

关系代数
是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。
关系代数的运算对象关系运算结果亦为关系。关系代数用到的运算符包括四类: 集合运算符、专门的关系运算符、算术比较符和逻辑运算符比较运算符和逻辑运算符是用来辅 助专门的关系运算符进行操作的,所以按照运算符的不同,主要将关系代数分为传统的集合运 算和专门的关系运算两类。有并、交、差、除、笛卡尔积等运算。

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

例如:创建一个触发器,当插入或更新成绩列时,检查插入的数据是否在合法范围内

索引的作用以及优缺点
索引就一种特殊的查询表,数据库的搜索
优点可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。
缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

什么字段适合建索引
唯一、不为空、经常被查询的字段

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


在所以的 DBMS 中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

视图:是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改会影响基本表。它使得我们获取数据更容易,相比多表查询。
表和视图的关系
视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图的相关数据。表就是关系数据库中实际存储数据用的。
视图优缺点

  • 优点:
    1)对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
    2 )用户通过简单的查询可以从复杂查询中得到结果。
    3 )维护数据的独立性,试图可从多个表检索数据。
    4 )对于相同的数据可产生不同的视图。
  • 缺点:
    性能:查询视图时,必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么就无法更改数据

游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。

列举几种表连接方式,有什么区别?
内连接、自连接、外连接(左右全)、交叉连接

  • 内连接:只有两个元素表相匹配的才能在结果集中显示
  • 外连接:
    左外连接:左边为驱动表,驱动表的数据全部显示,匹配表的不匹配的不会显示
    右外连接:右边为驱动表
    全外连接:连接的表中不匹配的数据全部会显示出来
    交叉连接:笛卡尔效应,显示的结果是链接表数的乘积

主键和外键的区别?
主键在本表中是唯一的、不可为空的,
外键可以重复、可以为空
外键和另一张表的主键关联,不能创建对应表中不存在的外键

union和union all有什么不同?
Union在进行表链接后会筛选掉重复的记录,所有在表链接后会对所产生的 结果进行排序运算,删除重复的记录再返回结果。实际大部分应用中不会产生重复的记录,最常见的是过程表与历史表Union。
Union all 只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,Union all要比union快得多,所以,如果可以去人合并的两个结果集中不包含重复的数据的话,就使用union all。

Varchar2 和 varchar 有什么区别?
1.长度上的区别
char的长度是固定的,而varchar2的长度是可以变化的。
比如,表示你存储的字符将占 20 个字节,包含 17 个空,而同样的 varchar2(20)只占了 3 个字节,20 只是最大值,当你存储的字符小于 20 时,按实际长度存储。 char 的效率要比 varchar2 的效率高。
2.意义上的区别
目前 varchar 是 varchar2 的同义词,工业标准的 varchar 类型可以存储空字符串,但Oracle ['ɔrək(ə)l] 自己开发了一个数据类型 varchar2,这个类型不是一个标准的 varchar,他将在数据库中 varchar 列可以存储空字符串的 特性改为存储 null 值,如果你想有向后兼容的能力,oracle 建议使用 varchar2 而不是 varchar。
3.空间大小上的区别
Varchar2比char要节省空间,varchar2效率也比char差一些,所以如果想获得效率,就必须牺牲一定的空间,以空间换效率。VARCHAR2虽然比CHAR节省空间,但如果一个VARCHAR2列经常被修改,且每次被修改数据的长度不同会引起‘行迁移’现象。

Oracle 和 Mysql 的区别?
1)库函数不同。
2)Oracle 是用表空间来管理的,Mysql 不是。
3)显示当前所有的表、用户、改变连接用户、显示当前连接用户、执行外部脚本的语句的不同。
4)分页查询时候,mysql 用 limit,oracle 用 rownum

  • oracle分页查询语句
    使用rownum,两种如下:
    第一种:
    select * from (select t.,rownum row_num from mytable t) b where b.row_num between 1 and 10
    第二种:
    select * from ( select a., rownum rn from mytable a where rownum <= 10 ) where rn >= 1
    使用rowid, 如下:
    select * from scott.emp where rowid in (select rd from (select rowid as rd ,rownum as rn from scott.emp ) where rn<=6 and rn>3)

从数据库中随机取50条
select * from (select * from t_example order by dbms_random.random) where rownum <= 50

Oracle 语句有多少类型
Oracle 语句分三类:DDL、DML、DCL

  • DDL(Data Definition Language)数据定义语言,包括:
    Create 语句:可以创建数据库和数据库的一些对象。
    Drop 语句:可以删除数据表、索引、触发程序、条件约束以及数据表的权限等。
    Alter 语句:修改数据表定义及属性。
    Truncate 语句:删除表中的所有记录,包括所有空间分配的记录被删除。
  • DML(Data Manipulation Language)数据操控语言,包括:
    Insert 语句:向数据表张插入一条记录。
    Delete 语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操 作对象仍是记录。
    Update 语句:用于修改已存在表中的记录的内容。
  • DCL(Data Control Language)数据库控制语言,包括:
    Grant 语句:允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。
    Revoke 语句:可以废除某用户或某组或所有用户访问权限

order by 与 group by 的区别

order by 排序查询,group by 分组查询
order by:默认是ASC,按升序排列,DESC降序排列。order by执行后会进行全表扫描,降低性能,如果数据量特别大的时候,要排序的话尽量按照组合索引中的字段进行order by。后面可以跟多个字段,优先级按先后顺序。
group by:把相同的列放到一组。group by的实现过程除了要使用排序操作外,还要进行分组操作。group by操作想要利用索引,必须满足group by字段必须同时存放于同一个索引中,且该索引是一个有序索引,而且,使用不同的聚合函数也会影响是否使用索引来实现group by操作。
having 只能用于 group by 子句、 作用于组内,having 条件子句可以直接跟函数表达式。使用 group by 子句的查询语句需要使用聚合函数。

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

行转列、列换行怎么转
1)使用decode函数
2)使用case when语句

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

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

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 。存储大对象的数据类型,如医学记录(如X-射线)、视频、图像等。

CLOB:存储大量、单字节、字符数据,存储在内部表空间,用于存储字符串类型的Lob,如文本和XML文件等,字符串已数据库字符集编码。
NLOB:存储定宽、多字节、字符数据,多字节国家字符数据,存储在内部表空间。
BLOB:存储较大无结构的二进制数据,存储在内部表空间。
BFILE:将二进制文件存储在数据库外部的操作系统文件中。存放文件路径。数据库存储一个执行外部文件的指针,所以它是只读的。 

truncate与 delete区别
TRUNCATE['trʌŋ.keɪt] TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。

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

oracle获取系统时间
select to_char(sysdate, 'yyyy-MM-dd HH24:mi:ss') from dual;

oracle怎么去除去重
使用distinct关键字。
distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是distinct只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。
select distinct 字段名1,字段名2 from 表格 order by 字段名
select *, count(distinct name) from table group by name

数据独立性
应用程序数据结构之间相互独立、互不影响。在三层模式体系结构中数据独立性是指数据库系统在某一层次模式上的改变不会使它的上一层模式也发生改变的能力。数据独立性包括数据逻辑独立性和数据物理独立性。

物理独立性
是指用户的应用程序存储在磁盘上的数据库中数据是相互独立的。即数据在磁盘上怎样存储由 DBMS 管理,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变。

逻辑独立性
是指用户的应用程序数据库的逻辑结构是相互独立的,即当数据的逻辑结构改变时,用户程序也可以不变。

数据模型
是数据特征的抽象。数据(Data)是描述事物的符号记录,模型(Model)是现实世界的抽象。数据模型是对现实世界数据特征的模拟和抽象

  • 组成要素:数据结构、数据操作、数据约束
  • 按不同的应用层次分成三种类型:分别是概念数据模型、逻辑数据模型、物理数据模型。
    概念模型(Conceptual Data Model),是一种面向用户、面向客观世界的模型,主要用来描述世界的概念化结构,它是数据库的设计人员在设计的初始阶段,摆脱计算机系统及DBMS的具体技术问题,集中精力分析数据以及数据之间的联系等,与具体的数据管理系统(Database Management System,简称DBMS)无关。概念数据模型必须换成逻辑数据模型,才能在DBMS中实现 。
    在概念数据模型中最常用的是E-R模型、扩充的E-R模型、面向对象模型及谓词模型。
    逻辑模型(Logical Data Model),是一种面向数据库系统的模型,是具体的 DBMS 所支持的数据模型,如网状数据模型(Network Data Model)、层次数据模型(Hierarchical Data Model)等等。此模型既要面向用户,又要面向系统,主要用于数据库管理系统(DBMS)的实现。
    物理模型(Physical Data Model),是一种面向计算机物理表示的模型,描述了数据在储存介质上的组织结构,它不但与具体的 DBMS 有关,而且还与操作系统和硬件有关。每一种逻辑数据模 型在实现时都有其对应的物理数据模型。DBMS 为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成,而设计者只设计索引、聚集等特殊结构。

having 和 where 的联系与区别?
联系:都用去筛选
区别:where是一个约束声明,使用where来约束老子数据库的数据;where是在结果返回之前起作用的;whrere中不能使用聚合函数(如SUM, COUNT, MAX, AVG);where不需要分组,在分组前过滤数据
having是一个过滤声明;在查询返回结果集后对查询结果进行的过滤操作;在having中可以使用聚合函数。having要配合group by使用,在分组后过滤数据。
where在group by之前执行 ,having在group by之后执行。

规范化理论
用来改造关系模式,通过分解关系模式来消除其中不适合的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

是数据库逻辑设计的指南和工具,具体表现在三个方面:

  1. 数据分析阶段,用数据依赖的概念分析和表示各项数据项之间的观
  2. 在设计概念结构阶段,用规范化理论消除初步ER图冗余的联系
  3. 有 ER 图像数据模型转化阶段,用模式分解的概念和方法指导设计

函数依赖是唯一确定的关系,例如在一个表授课(课程号,课程名,课程学分,教师 号,教师姓名,参考书号,参考书名)。当然这个表的主键是(课程号,教师号,参考 书号)课程名和课程学分函数依赖课程号,也就是说课程号唯一确定名字和学分;同 理,教师姓名函数依赖教师号;参考书名函数依赖参考书号。但是,教师号可能多值 依赖课程号,因为给定一个(课程号,参考书号)的组合,可能有对应多个教师号。 这是因为多个老师可以使用相同或不同的参考书上同一门课。 简单点讲,函数就是唯 一确定的关系;多值依赖却不能唯一确定

从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作“Armstrong 公理”

数据库设计(Database Design)
是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统DBMS 常用存取方式:

  • 第一种是索引方法,主要时 B+树索引方法;
  • 第二种是聚簇 (clustering)方法;
  • 第三种是 hash 方法。 计算机系统对并发事务中并发操作的调度是随机的,而不同的调度可能会产生不同的结果。在计算机中,多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果 相同,我们称这种调度策略为可串行化(Serializable)调度。

共享锁【S 锁】 又称读锁,若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A 但不能修改 A,其他事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。这保证了其他事务可以读 A,但在 T 释放 A 上的 S 锁之前不能对A做任何修改。

排他锁【X 锁】 又称写锁。若事务 T 对数据对象 A 加上 X 锁,事务 T 可以读 A 也可以修改 A,其他事务不能再对 A 加任何锁,直到 T 释放 A 上的锁。这保证了其他事务在 T 释放 A 上的锁之前不能再读取和修改 A。

关系数据库
是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用 的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新 召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、 列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。当创造一个关系数据库的时候,你能定义数据列的可能值的范围和可能应用于那个数据值的进一步约束。 而 SQL 语言是标准用户和应用程序到关系数据库的接口。
其优势是容易扩充,且在最初的数据库创造之后,一个新的数据种类能被添加而不需要修改所有的现有应用软件。主流的关系数据库有 oracle、db2、sqlserver、sybase、mysql 等。
操作
◇查询:选择、投影、连接、除、并、交、差
◇数据更新:插入(insert)、删除(delete)、修改(update)

DBMS 支持哪几种数据模型?SQL 的四个组成部分是什么?
常用的是层次模型,网状模型和关系模型(最重要)
SQL的四个组成部分:

  1. 数据库模式定义语言(Database schema definition language)DDL:create用来创建数据库中的各种对象——表、视图、索引、同义词、聚簇等
  2. 数据查询语言(Data query language)dql:基本结构是由SELECT子句,FROM子句和WHERE子句组成的查询块
  3. 数据操纵语言(data manipulation language)dml:插入INSERT、更新UPDATE和删除DELETE
  4. 数据控制语言(Data control language)dcl:用来授予或回收访问数据库的某种特权,并控制数据库操纵事物发生的时间和效果,对数据库实行监视等
  • 数据库操纵语言举例
    比如SELECT命令的作用是检查表的内容,UPDATE 命令的作用是修改表等等。

介绍下有哪些应用数据库?
SQL数据库,DB2数据库,access 数据库,Oracle 数据库等等。

什么是数据独立性。
数据独立性是指包括物理独立性和逻辑独立性。
物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。
逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即,当数据的逻辑结构改变时,用户程序也可以不变。

DBMS支持那几种数据模型
层次模型、网状模型、关系模型、面向对象模型?

数据库:索引的优缺点,什么是事务,事务的特性

关系与关系模式、关系数据库的区别:
关系实际上就是关系模式
数据库的关系操作有哪些,各有什么作用
数据库保护(访问)的内容有哪些
INF 是啥数据模式
数据库管理员的作用是什么
DBA的职责是什么
在可变分区管理需要哪些硬件机制

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle 是目前世界上最流行的关系数据库管理系统之一,许多公司都会在面试中涉及 Oracle 相关的问题。以下是 Oracle 面试必会的六道经典问题: 1. Oracle 中的事务 事务是数据库执行的基本单位,是一组逻辑操作单元,必须全部执行成功或全部不执行才能称之为一次事务。在 Oracle 中,开始事务需要使用命令 "BEGIN TRANSACTION",提交事务需要使用命令 "COMMIT",回滚事务需要使用命令 "ROLLBACK"。 2. Oracle 中的锁机制 Oracle 中的锁机制用于保证并发访问时数据的一致性。有共享锁(SHARED)和排他锁(EXCLUSIVE)两种锁模式。共享锁可以在其他会话读取数据的同时允许当前会话读取该数据,而排他锁在其他会话读取和修改数据时都会阻塞当前会话的访问。 3. Oracle 中的索引 索引是提高查询效率的重要手段。Oracle 中的索引分为 B 树索引和位图索引两种。B 树索引适合用于范围查询或排序操作,位图索引适合用于频繁更新的列或需要进行多列的复合查询。 4. Oracle 中的备份和恢复 备份和恢复是数据库管理中的重要工作。Oracle 提供了多种备份和恢复方式,如使用 RMAN 工具备份,通过 exp 和 imp 命令进行备份和恢复,以及使用 Oracle 数据库自身的类似于 SQL Server 的事务日志(redo log)进行增量备份和恢复。 5. Oracle 中的存储方式 Oracle 中的存储方式有三种:堆积表(heap table)、索引组织表(index-organized table,IOT)和分区表(partitioned table)。堆积表是最基本的表形式,数据存储在物理块上;索引组织表与堆积表类似,但是数据存储在一个按照主键排序的 B 树索引上,可以提高查询效率;分区表将表分成多个逻辑区域,可以提高查询效率并简化备份和恢复过程。 6. Oracle 中的性能优化 性能优化是 Oracle 数据库管理员和开发人员需要掌握的重要技能。可以通过多种方式进行优化,如使用索引,尽量减少数据库访问,使用 bind 变量替代字面值等。还可以通过分析 SQL 语句执行程序(在 SQL*Plus 中使用 EXPLAIN PLAN 命令)、使用 Oracle 数据库自带的 SQL Trace 模块等方式识别瓶颈点并调整优化方案。 ### 回答2: Oracle是当前最流行的关系数据库管理系统,具有高可靠性、高性能和强大的数据管理能力。在Oracle面试中,有6道经典的面试题,这些问题往往被考官视为必考题,对于应聘者来说必须掌握。 1.数据库范式是什么?有几种范式? 数据库范式是一种规范化的设计原则,用于优化数据库设计。范式的理念是将数据分为更小的“子集”,每个子集都可以单独处理。Oracle数据库中常用的范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF),BCNF(Boyce-Codd范式)。 2.索引是什么?有什么优势和劣势? 索引是一种用于提高数据库查询效率的数据结构,它存储了表数据中的某些列及其对应的行指针。优势在于大大提高了数据查询效率和性能,缺点在于占用更多的存储空间和增加数据更新的成本。 3.SQL语言中的DDL、DML、DCL分别是什么? DDL(Data Definition Language)是SQL的数据定义语言,用于定义、修改表、视图、约束等数据库结构;DML(Data Manipulation Language)是SQL的数据操作语言,用于增加、修改、删除数据;DCL(Data Control Language)是SQL的数据控制语言,用于控制数据库的访问权限、用户、角色等。 4.Oracle的存储结构是什么? Oracle的存储结构较为复杂,可分为:数据文件、控制文件、在线重做日志文件。数据文件存储实际的数据内容,控制文件保存数据库的结构信息和操作日志,在线重做日志文件记录数据库中所发生的变化。 5.Oracle中如何通过SQL语句进行数据备份和恢复? Oracle中有两种备份方式,分别是物理备份和逻辑备份。物理备份是指通过对数据文件的备份来保护数据库数据,常用工具为RMAN;逻辑备份是指通过生成SQL语句或复制现有表中的数据来作为备份,常用工具为exp和imp。 6.Oracle中采用的锁机制? Oracle中有共享锁和排他锁两种锁机制,共享锁是读锁,可被多个用户同时获取,但不能对数据进行修改;排他锁是写锁,只可一个用户获取,且可对数据进行修改。Oracle还采用了多版本并发控制(MVCC)机制,通过版本号和SCN号控制读写锁的获取,避免数据锁死的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值