文章目录

  • 前言
  • 数据库系统
    • 特点
    • 数据库管理系统
  • SQL语言
    • (数据库操纵语言)DML
  • 存储过程(Stored Procedure)
  • 数据库事务
  • 关系数据模型
    • 关系模式
    • 关系数据结构
    • 关系操作集合
      • 连接(JOIN)
      • 投影(π)
    • 关系完整性约束
  • 体系结构
    • 三级模式
    • 两级映像
  • 范式
  • 视图
  • 触发器
  • 索引
  • 文件
  • 日志
  • E-R
  • 故障
  • SQL语句
  • MySQL
  • SQL Server
  • Access(微软发布的关系数据库管理系统)
  • Visual FoxPro
          • 你也曾喜欢洁白的雪吗,sincerely,end.


前言

  为提升和巩固个人现有知识水平,选择牛客网的选择题进行练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢


数据库系统

特点

  1. 【问】下面描述中不属于数据库系统特点的是?
      A. 数据共享
      B. 数据完整性
      C. 数据冗余度高
      D. 数据独立性高

摘自 百度百科 —— 数据库系统


数据库系统的基本要求
保证数据的独立性。数据和程序相互独立有利于加快软件开发速度,节省开发费用。
冗余数据少,数据共享程度高。
③系统的 用户接口简单,用户容易掌握,使用方便。
④确保系统 运行可靠,出现故障时能迅速排除;能够保护数据不受非受权者访问或破坏;能够防止错误数据的产生,一旦产生也能及时发现。
有重新组织数据的能力,能改变数据的存储结构或数据存储位置,以适应用户操作特性的变化,改善由于频繁插入、删除操作造成的数据组织零乱和时空性能变坏的状况。
⑥具有 可修改性可扩充性
⑦能够 充分描述数据间的内在联系

  1. 【答】下面描述中不属于数据库系统特点的是?
      A. 数据共享
      B. 数据完整性
      C. 数据冗余度高
      D. 数据独立性高
  2. 数据库系统相关人员是数据系统的重要组成部分,有三类人员:数据库管理员 应用程序开发人员 最终用户
  3. DB、DBMS和DBS三者之间的关系是:DBS(数据库系统)包含 DB(数据库)DBMS(数据库管理系统)
  4. 【问】数据库技术的根本目标是要解决数据的 ( ) 。
      A. 存储问题
      B. 共享问题
      C. 安全问题
      D. 保护问题

摘自 牛客网评论


数据库的直接目标:解决数据存储问题
数据库的根本目标:为了不同用户或应用程序之间的数据共享

  1. 【答】数据库技术的根本目标是要解决数据的 ( ) 。
      A. 存储问题
      B. 共享问题
      C. 安全问题
      D. 保护问题

数据库管理系统

  1. 【问】数据库管理系统的主要作用是 _____ 。
      A.实现数据的统一管理以及对数据库数据的一切操作
      B.收集数据
      C.进行数据库的规划、设计、维护等工作
      D.提供数据查询界面

摘自 维基百科 —— 数据库管理系统 、 MBA智库 —— 数据库管理系统


数据库管理系统(DBMS):
  是一种操纵和管理数据库的大型软件,是用于建立使用维护数据库,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。为管理数据库而设计大型电脑软件管理系统。具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等。通常数据库管理师会使用数据库管理系统来创建数据库系统

  1. 【答】数据库管理系统的主要作用是 _____ 。
      A.实现数据的统一管理以及对数据库数据的一切操作
      B.收集数据
      C.进行数据库的规划、设计、维护等工作
      D.提供数据查询界面

  2. 【问】数据库管理系统的工作不包括( )。
      A.定义数据库
      B.对已定义的数据库进行管理
      C.为定义的数据库提供操作系统
      D.数据通信

摘自 牛客网评论


  数据库管理系统要做的工作通常有以下四个方面: ①描述数据库;②管理数据库;③维护数据库;④ 数据通讯。

  1. 【答】数据库管理系统的工作不包括( )。
      A.定义数据库
      B.对已定义的数据库进行管理
      C.为定义的数据库提供操作系统
      D.数据通信

SQL语言

  1. 【问】SQL 语言是( )的语言,易学习。
      A. 过程化
      B. 非过程化
      C. 格式化
      D. 导航式

摘自 牛客网评论


  SQL是高级的非过程化编程语言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。 SQL 决定了应该做什么而不是如何去做

  1. 【答】SQL 语言是( )的语言,易学习。
      A. 过程化
      B. 非过程化
      C. 格式化
      D. 导航式

(数据库操纵语言)DML

  1. 【问】以下不属于DML的是?
      A. INSERT
      B. DELETE
      C. CREATE
      D. UPDATE

摘自 各大网站零碎的学习笔记


数据查询语言(DQL): select语句
数据操纵语言(DML): insert, update, delete
数据定义语言(DDL): create(创建) , alter(修改) , drop(删除) , rename(重命名), truncate(删除表中的数据)
数据控制语言(DCL): grant(授权), revoke(回收权限),lock(对数据库的特定部分进行锁定)
控制语句(TCL): commit(提交) , rollback(回滚) , savepoint(记录点,用来回滚)

  1. 【问】以下不属于DML的是?
      A. INSERT
      B. DELETE
      C. CREATE
      D. UPDATE

存储过程(Stored Procedure)

  1. 【问】下列哪个 不是存储过程的好处
      A. 更加安全
      B. SQL优化
      C. 增加网络流量
      D. 重复使用

摘自 菜鸟教程 —— MySQL 存储过程


存储过程是什么
  存储过程是一种 在数据库中存储复杂程序,以便外部程序调用的一种数据库对象 。为完成 特定功能的SQL语句集经编译创建并保存 在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想:数据库 SQL 语言层面的代码封装与重用


优点
  可封装,并隐藏复杂的商业逻辑。
  可回传值,并可接受参数。
  无法使用 SELECT 指令来运行(因为它是子程序),与查看表,数据表或用户定义函数不同。
  可以用在数据检验,强制实行商业逻辑等。


缺点
  往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
  存储过程的性能调校与撰写,受限于各种数据库系统。

  1. 【答】下列哪个不是存储过程的好处
      A. 更加安全 —— 可设定只有某用户才具有对指定存储过程的使用权。
      B. SQL优化 —— 对数据库操作时,可将复杂操作用存储过程封装,与数据库提供的事务处理结合一起使用,只需要连接一次数据库。(例如对多个表进行Update,Insert,Query,Delete 时,用程序来完成,就变成了一条条的SQL语句,可能要多次连接数据库)
      C. 增加网络流量 —— 对于较为复杂的逻辑,减少了网络流量之间的消耗。(例如一个需要数百行的SQL代码的操作有一条执行语句完成)
      D. 重复使用 —— 减少数据库开发人员的工作量。

数据库事务

  1. 【问】 数据库事务的4个特征是:原子性、一致性、( )、隔离性。

本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?


  原子性 Atomicity:一个原子事务中的所有操作要么全部成功,要么全部失败。
   一致性 Consistency:数据库总是从一个一致性的状态转换到另一个一致性的状态。
  隔离性 Isolation:针对并发事务而言,事务必须在不干扰其他进程或事务的前提下独立执行。
  永久性(持续性) Durability:一旦事务提交成功,它对于数据的修改就会永久保存到数据库中,此时即使系统崩溃,修改的数据也不会丢失(磁盘损坏不包括,需要靠备份等)。

  1. 【答】 数据库事务的4个特征是:原子性、一致性、持续性(永久性)、隔离性。

  2. 【问】在并发控制技术中,最常用的是封锁机制,基本的封锁类型有排它锁 X 和共享锁 S ,下列关于两种锁的相容性描述不正确的是( )
      A.X/X :TRUE
      B.S/S:TRUE
      C.S/X:FALSE
      D.X/S:FALSE

摘自 牛客网评论,本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?


   如果具有排他锁(X 锁),则在释放排他锁(X 锁)之前,其他事务均无法获取该资源的任何类型(共享、更新或排他)的锁。
  如果共享锁(S 锁)已应用到资源,则即使第一个事务尚未完成,其他事务也可以获取该项的共享锁或更新锁(U 锁)。但是,在释放共享锁之前,其他事务无法获取排他锁。

  1. 【问】在并发控制技术中,最常用的是封锁机制,基本的封锁类型有排它锁 X 和共享锁 S ,下列关于两种锁的相容性描述不正确的是( )
      A.X/X :TRUE
      B.S/S:TRUE
      C.S/X:FALSE
      D.X/S:FALSE
  2. 【问】已知事务T1 的封锁序列为:LOCK S(A)…LOCK S(B)…LOCK X( C)…UNLOCK(B) …UNLOCK (A) …UNLOCK ( C)
    事务T2 的封锁序列为:LOCK S(A) …UNLOCK (A) …LOCK S(B)
    …LOCK X( C) …UNLOCK ( C) …UNLOCK (B)
    则遵守两段封锁协议的事务是( )。
      A.T1
      B.T2
      C.T1和T2
      D.没有

摘自 牛客网评论


  两段锁协议:每个事务的执行可以分为两个阶段: 生长阶段(加锁阶段) 衰退阶段(解锁阶段)
加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前要申请并获得X锁。 加锁不成功,则事务进入等待状态,直到加锁成功才继续执行
解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段, 在该阶段只能进行解锁操作不能再进行加锁操作


  两段锁协议要求 每个事务中,所有的封锁请求先于所有的解锁请求 ,事务T1前面都是加锁阶段阶段,后面都是解锁阶段满足要求。而事务T2又加锁又解锁,不满足要求。

  1. 【答】已知事务T1 的封锁序列为:LOCK S(A)…LOCK S(B)…LOCK X( C)…UNLOCK(B) …UNLOCK (A) …UNLOCK ( C)
    事务T2 的封锁序列为:LOCK S(A) …UNLOCK (A) …LOCK S(B)
    …LOCK X( C) …UNLOCK ( C) …UNLOCK (B)
    则遵守 两段封锁协议 的事务是( )。
      A.T1
      B.T2
      C.T1和T2
      D.没有

  2. 【问】可串行化调度肯定是正确的并发调度?

摘自 本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?

事务隔离级别脏读 ②不可重复读③幻读④
未提交读[Read Uncommitted]允许允许允许
已提交读[Read Committed]禁止允许允许
可重复读[Repeatable Read]禁止禁止允许
可串行化[Serializable]禁止禁止禁止

  上表中,在相同运行环境下,不同隔离级别的顺序按照并发性由高到低,隔离性由低到高排序

  1. 【答】可串行化调度肯定是正确的并发调度。
  2. 【问】下面的数据库动作“begin transaction; insert into employee values(1, ‘Cardinal’); commit; rollback;”最终插入的数据会被取消,不会记录到数据库中?

  事务提交后就不能回滚了

  1. 【答】下面的数据库动作“begin transaction; insert into employee values(1, ‘Cardinal’); commit; rollback;”最终插入的数据会被取消,不会记录到数据库中? 错!

关系数据模型

关系模式

  1. 【问】设有属性A,B,C,D,以下表示中不是关系的是()
      A.R(A)
      B.R(A,B,C,D)
      C.R(A×B×C×D)
      D.R(A,B)

摘自 牛客网评论


  关系的描述称为关系模式,可 形式化为R(U,D,DOM,F)。 R为关系名,U是组成该关系的属性名集合,D是属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。 通常将关系模式简记为R(U)或R(A1,A2,…,An),其中R为关系名,U为属性名集合,A1,A2,…,An为各属性名。

  1. 【答】设有属性A,B,C,D,以下表示中不是关系的是()
      A.R(A)
      B.R(A,B,C,D)
      C.R(A×B×C×D)
      D.R(A,B)

关系数据结构

  1. 【问】在关系数据库中,用来 表示实体之间联系 的是()
      A.树结构
      B.网结构
      C.线性表
      D.二维表

摘自 百度知道 —— 二维表是什么数据模型 、 牛客网评论


关系数据模型的数据结构逻辑结构是一张二维表(Table,简称表) ,由行和列组成。其常用术语有:
  ① 关系模式(Relational Schema):对应一个 二维表的表头,它 对应E-R模型中的实体型,是相对稳定的。
  ② 属性(Attribute): 二维表中的一列即为一个属性,给每一个属性起一个名称即属性名。它们与E-R模型中实体型的属性相同。
  ③ 关系(Relation):对应通常所说的 一张二维表,它与E-R模型中的实体集对应。
  ④ 元组(Tuple):二维表中 除表头以外的一非空行即为一个元组,元组与E-R模型中的实体对应。
  ⑤ 候选键(Candidate Key):二维表中的某些属性的集合,它 可以唯一确定一个元组。一个关系可以有若干个候选键,通常选择一个作为主键(Primary Key)。它们分别与E-R模型中的关键字和主关键字对应。
  ⑥ (Domain); 属性的取值范围。属性的域同E-R模型中属性的域意义相同。
  ⑦ 分量(Attribute Value): 元组中一个属性所取的具体值


  数据模型分类:数据库系统可以分为 层次模型网状模型关系模型树结构为层次数据模型的,网结构为网状数据模型的。

  1. 【答】在关系数据库中,用来 表示实体之间联系 的是()
      A.树结构
      B.网结构
      C.线性表
      D.二维表
  2. 关系数据模型的基本数据结构 关系

关系操作集合

  1. 【问】在下列4 个选项中,不属于基本关系运算的是
      A.连接
      B.投影
      C.选择
      D.比较

部分摘自 维基百科 —— 关系代数 (数据库) 与 百度百科 —— 关系运算


  传统集合运算符:并(∪),差(-),交(∩)
  专门的关系运算符:选择(σ),投影(π),连接(⋈),除法(÷)
  基本关系运算:并(∪),差(-),笛卡尔积(×),投影(π),选择(σ)


  集合 R , S , T 颜色如下:
  
  (UNION):设有两个关系R和S,它们具有相同的结构。R和S的并是由属于R或属于S的元组组成的集合,运算符为∪。记为T=R∪S。图示如下:
  
  (DIFFERENCE):设有两个关系R和S,它们具有相同的结构。R和S的差是由属于R但不属于S的元组组成的集合,运算符为-。记为T=R-S。图示如下:
  
  (INTERSECTION):设有两个关系R和S,它们具有相同的结构。R和S的交是由既属于R又属于S的元组组成的集合,运算符为∩。记为T=R∩S。R∩S = R -(R-S)。图示如下:
  
  笛卡尔积(直积):两个集合A和B的笛卡尔积表示为A × B,第一个对象是X的成员,第二个对象是Y的所有可能有序对的其中一个成员。记为 A×B={(x,y)|x∈A∧y∈B}
  例如,A={a,b}, B={0,1,2},则
  A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
  B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}

  选择:从关系中找出满足给定条件的那些元组,筛选符合条件的行

  投影:从关系模式中挑选若干属性组成新的关系,筛选符合条件的列

  连接:从两个关系的笛卡尔积中选择属性间满足一定条件的元组。
  除法:可理解为笛卡尔积的逆运算。

  1. 【答】在下列4 个选项中,不属于基本关系运算的是
      A.连接
      B.投影
      C.选择
      D.比较

  2. 【问】在查询优化策略中,首先应该让投影操作尽可能早的做,然后再尽可能早的进行选择运算?

CSDN 猪哥原创——关于sql和MySQL的语句执行顺序(必看!!!)
  这篇文作者真的讲得太透彻了!下面是学习笔记(仅为个人理解,如有错误请指正,谢谢! ),部分概念摘自 菜鸟教程 —— SQL 篇 、51CTO —— 数据库频道


在下面过程中,每一步都会为生成一个虚拟表,作为下一步的输入:
  from ① ——> join ② ——> on ③ ——> where ④ ——> group by ⑤——> avg,sum… ⑥ ——> having ⑦ ——> select ⑧——> distinct ⑨ ——> order by ⑩ ——> limit
【注】
from ——>join(如果有) 【选择】
  为 确定需要查询的表范围 。从前往后,每次将join前后的表【join前:如果是第一个join就是单个真实表,如非第一个join就是虚拟表;join后:单个真实表】进行笛卡尔积,生成虚拟表,然后执行③
on(如果有)【选择】
   筛选出满足条件的元组 ,生成虚拟表【如果on后还有join,重回②,如非进④】
where(如果有)【选择】
  对③得到的最终虚拟表进行 筛选过滤 ,生成虚拟表
group by(如果有)【选择】
  用于结合聚合函数(⑥中的函数), 根据一个或多个列 (group by后面的语句决定)对结果集进行 分组 ,生成虚拟表,进⑥
avg,sum…(如果有)【选择】
  将group by后组内元组(行)根据【avg/sum/…】 进行结合运算 ,最终 每组不论多少元组(行)只生成一元组(行) ,生成虚拟表
having (如果有)【选择】
  将⑥生成的虚拟表 按分组数据按条件进行筛选 ,生成虚拟表
select 【投影】
  将⑦虚拟表中的 属性(列)筛选 ,生成虚拟表
distinct(如果有)【选择】
  只 保留 ⑧完成后 不相同的元组 (如果之前运用过⑤则不存在元组相同的部分)
order by(如果有):
  这一步在排序后返回的是游标而不是集合(集合中的元组之间只是逻辑组合,没有顺序;将元组按特定的顺序组织在一起返回的对象称为游标), 对表进行排序
limit (如果有)【选择】
  选取 指定的条数的数据

  1. 【答】在查询优化策略中,首先应该让投影操作尽可能早的做,然后再尽可能早的进行选择运算?【,先选择后投影】
  2. 【问】已知关系R和S,如下所示:

    R 和S进行乘运算,其结果的元组数是(  )。

摘自 牛客网评论


  R x S 元祖数为 9
  R ∩ S 元祖数为 1
  R U S 元祖数为 5
  R - S 元祖数为 2

连接(JOIN)

  1. 【问】学校数据库中有学生和宿舍两个关系:
      学生(学号,姓名)和宿舍(楼名,房间号,床位号,学号)假设有的学生不住宿,床位也可能空闲。如果要列出所有学生住宿和宿舍分配的情况,包括没有住宿的学生空闲的床位,则应执行( )
      A.全外联接
      B.左外联接
      C.右外联接
      D.自然联接

部分摘自 菜鸟教程 —— SQL连接(JOIN)


  SQL join 用于把来自两个或多个表的行结合起来。
  下图展示 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。

  INNER JOIN:如果表中有至少一个匹配才返回行
  LEFT JOIN:即使右表中没有匹配也从左表返回所有的行
  RIGHT JOIN:即使左表中没有匹配也从右表返回所有的行
  FULL JOIN只要其中一个表中存在匹配则返回行


本题解析
假设Student表和Dorm表如下:
Student表

stu_idname
1ling
2xu

Dorm表

dorm_idroom_idbed_idstu_id
1112
112null

  学生xu选择了床位1,学生li没有选择床位,床位2没有被占用。


当 Student 表和 Dorm 表进行在stu_id属性上进行连接时:
  1. 使用内连接(Student inner join Dorm on stu_id),只有stu_id互相匹配时才会显示,即:

stu_idnamedorm_idroom_idbed_id
2xu111

  2. 如果使用左外连接(Student left join Dorm on stu_id),即使Dorm表中没有匹配的行,也要从Student表中返回所有行,对应的Dorm表的属性显示null值补齐。但这样2号床不会显示。

stu_idnamedorm_idroom_idbed_id
1lingnullnullnull
2xu111

  3. 如果使用右外连接(Student right join Dorm on stu_id),即使Student表中没有匹配的行,也要从Dorm表中返回所有行,对应的Student表的属性显示null值补齐。但这样1号学生不会显示。

stu_idnamedorm_idroom_idbed_id
2xu111
nullnull112

  4. 使用全外连接(Student full outer join Dorm on stu_id),两个表的有匹配和没有匹配的行都会显示。

stu_idnamedorm_idroom_idbed_id
1lingnullnullnull
2xu111
nullnull112
  1. 【答】学校数据库中有学生和宿舍两个关系:
      学生(学号,姓名)和宿舍(楼名,房间号,床位号,学号)假设有的学生不住宿,床位也可能空闲。如果要列出所有学生住宿和宿舍分配的情况,包括没有住宿的学生空闲的床位,则应执行( )
      A.全外联接
      B.左外联接
      C.右外联接
      D.自然联接
  2. 【问】设关系 R 和 S 的属性个数分别是 2 和 3 ,那么
    等价于 ( )。
      A.
      B.
      C.
      D.

摘自 牛客网评论


链接:
  题目要求的是关系代数中的seita连接操作,运算条件1<2,实际上是用列号来代替相应的属性,实现效果:即 用R中的每一行的第一个分量的值与S中每一行的第二个分量值进行比较,如果 满足条件,则 进行列连接操作,那么实际上可以转化成先进行笛卡尔积运算,这样 S中的第2列合并以后就变成了第4列了, 将符合条件的行留下来就行。

  1. 【答】设关系 R 和 S 的属性个数分别是 2 和 3 ,那么
    等价于
  2. 【问】从关系中挑选出指定的元组组成新关系的运算称为( )
      A."选取"运算
      B."投影"运算
      C."连接"运算
      D."交"运算

摘自 牛客网评论


  投影:选取相应列组成新元组
  连接:在多个关系的笛卡尔积中进行筛选出的新关系
  :是多个关系之间交集所产生的新的关系


  指定元组通过选取得到,如 select *** where ***

  1. 【答】从关系中挑选出指定的元组组成新关系的运算称为( )
      A."选取"运算
      B."投影"运算
      C."连接"运算
      D."交"运算

投影(π)

  1. 【问】在关系代数中,对一个关系做投影操作后,新关系的元组个数( )原来关系的元组个数
      A.小于
      B.小于或等于
      C.等于
      D.大于

摘自 牛客网评论


投影功效
   消除原关系中的某些列
   消除投影后重复的元组,因此元组也有变少的可能

  1. 【答】在关系代数中,对一个关系做投影操作后,新关系的元组个数( )原来关系的元组个数
      A.小于
      B.小于或等于
      C.等于
      D.大于

关系完整性约束

  1. 【问】设属性A是关系R的主属性,则属性A不能取空值(NULL)。这是()
      A.实体完整性
      B.参照完整性
      C.用户定义完整性
      D.域完整性

摘自 百度百科 —— 数据库完整性 、 菜鸟教程 —— SQL CHECK约束 、 菜鸟教程 —— SQL DEFAULT约束


  数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证。
  在关系模型中有四类完整性约束: 实体完整性 域完整性 参照完整性 用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性。系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则


实体
  关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定 主键外键 及其 参照表 ,RDBMS可自动实现其完整性约束条件
  实体完整性(Entity Integrity): 表中行的完整性 。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性 要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空①”(NULL)或重复
 【注】
  ①其中的空值(NULL)不是0,也不是空隔或空字符串,而是没有值。是指暂时“没有存放的值”、“不知道”或“无意义”的值。因为主键是实体数据(记录)的惟一标识,若主属性取空值,这与实体的定义矛盾。


域完整性(Domain Integrity)
  指数据库表中的 列必须满足某种特定的数据类型或约束 。其中约束又包括取值范围精度等规定。表中的 CHECK②、FOREIGN KEY 约束DEFAULT③、 NOT NULL定义都属于域完整性的范畴
 【注】
  ②CHECK 约束用于 限制列中的值的范围 。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
  ③DEFAULT 约束用于 向列中插入默认值 。如果没有规定其他的值,那么会将默认值添加到所有的新记录。


参照完整性(引用完整性)(Referential Integrity)
  属于 表间规则 。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。
  在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值
  要求:若属性组F是关系模式R1的主键,同时F也是关系模式R2的外键,则在R2的关系中,F的取值只允许两种可能:空值或等于R1关系中某个主键值。
  R1称为“被参照关系”模式,R2称为“参照关系”模式。(外键不一定与对应的主键同名。外键常用下划曲线标出。)


用户定义完整性(User-defined Integrity)
  是 对数据表中字段属性的约束 ,用户定义完整性规则(User-defined integrity)也称域完整性规则。包括字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,是 由确定关系结构时所定义的字段的属性决定 的(如,百分制成绩的取值范围在0~100之间等)。

  1. 【答】设属性A是关系R的主属性,则属性A不能取空值(NULL)。这是()
      A.实体完整性
      B.参照完整性
      C.用户定义完整性
      D.域完整性

  2. 【问】数据库的( )是指数据的正确性和相容性
      A.并发控制
      B.完整性
      C.安全性
      D.共享性

摘自 百度百科 —— 数据库完整性ql/sql-default.html)


  数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证。

  1. 【答】数据库的( )是指数据的正确性和相容性
      A.并发控制
      B.完整性
      C.安全性
      D.共享性

  2. 【问】小明设计了如下的学籍管理系统:(PK为主键,FK为外键)
    已知关系:
      学籍(学号,学生姓名) PK=学号
      成绩(科目号,成绩,学号) PK=科目代码,FK=学号
    已有表记录如下,请给出能够插入的成绩记录:

      A.(1,99,2)
      B.(5,68,1)
      C.(3,70,3)
      D.(7,45,null)

部分摘自 百度百科 —— 数据库完整性ql/sql-default.html)


  在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值


本题解析:
  A.主键科目号"1"已存在,不可重复
  C.主键科目号"3"已存在,不可重复
  D.外键的取值必须是另一个表的主键的有效值,或是“空”值

  1. 【答】小明设计了如下的学籍管理系统:(PK为主键,FK为外键)
    已知关系:
      学籍(学号,学生姓名) PK=学号
      成绩(科目号,成绩,学号)PK=科目代码,FK=学号
    已有表记录如下,请给出能够插入的成绩记录:

      A.(1,99,2)
      B.(5,68,1)
      C.(3,70,3)
      D.(7,45,null)

体系结构

三级模式

  1. 【问】在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征 的是( )
      A.外模式
      B.内模式
      C.存储模式
      D.模式

摘自 百度百科 —— 数据库三级模式


  数据库领域公认的标准结构是三级模式结构,包括 外模式概念模式内模式 ,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。
  用户级对应外模式,概念级对应概念模式,物理级对应内模式,使不同级别的用户对数据库形成不同的视图①。
【注】①视图:指观察、认识和理解数据的范围、角度和方法,是数据库在用户“眼中"的反映。


外模式(子模式/用户模式)
  对应于 用户级 。是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。是从模式导出的一个子集, 包含模式中允许特定用户使用的那部分数据 。用户可以通过外模式描述语言来描述定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观


概念模式(模式/逻辑模式)
  对应于 概念级 。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是 对数据库中全部数据的逻辑结构和特征的总体描述 ,是所有用户的公共数据视图( 全局视图 )。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观


内模式(存储模式)
  对应于 物理级 。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构 ,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观


  在一个数据库系统中,只有唯一的数据库, 因而作为定义 、描述数据库存储结构的 内模式 和定义、描述数据库 逻辑结构 的模式,也是 唯一 的,但建立在数据库系统之上的应用则是非常广泛、多样的,所以对应的 外模式不是唯一 的,也不可能是唯一的。


  综上

类别级别内容
内模式(存储模式)物理级别全体数据的内部表示或底层描述
模式(概念模式/逻辑模式)概念级别数据库设计者构造的全局逻辑结构
外模式(子模式/用户模式)用户级别全局中的子集,给用户的
  1. 【答】在数据库的三级模式结构中,描述数据库中 全体数据的全局逻辑结构和特征 的是( )
      A.外模式
      B.内模式
      C.存储模式
      D.模式

  2. 概念模型独立于 ( )
      A.E-R模型
      B.硬件设备和DBMS
      C.操作系统和DBMS
      D.DBMS

  3. 【问】数据库系统达到了数据独立性 是因为采用了 ( )。
      A.层次模型
      B.网状模型
      C.关系模型
      D.三级模式结构

摘自 百度百科 —— 数据库三级模式


  数据库领域公认的标准结构是三级模式结构,包括 外模式概念模式内模式 ,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性

  1. 【答】数据库系统达到了数据独立性 是因为采用了 ( )。
      A.层次模型
      B.网状模型
      C.关系模型
      D.三级模式结构

两级映像

  1. 【问】数据库系统的体系结构是( ) ?

摘自 之前总结的各大网站零碎笔记


  数据库 三级模式体系结构 的划分,有利于 保持数据库的数据独立性
三级模式之间提供了两级映像
   模式/内模式的映像 外模式/模式的映像 。这两级映射 保证数据库中的数据具有较高的物理独立性和逻辑独立性


数据的物理独立性
  当数据库的 内模式发生改变时,数据的的逻辑结构不变 。由于应用程序处理的只是数据的逻辑结构,这样物理独立性可以保证,当数据的物理结构改变了,应用程序不用改变。但是,为了保证应用程序能够正确执行,需要修改概念模式/内模式之间的映像。
数据的逻辑独立性
  用户的 应用程序与数据库结构相互独立 。数据的逻辑结构发生变化后,用户程序也可以不修改。但是,为了保证应用程序能够正确执行,需要修改外模式/概念模式之间的映像。

  1. 【答】数据库系统的体系结构是 三级模式结构和两级映象

范式

  1. 【问】在关系模式DB中,任何二元关系模式的最高范式 必定是
      A.1NF
      B.2NF
      C.3NF
      D.BCNF

本人博客详解 —— 数据库设计的1NF+2NF+3NF+BCNF的故事,只一篇就搞懂


  1NF:关系中的每个属性都不可分。
  2NF:在1NF基础之上,消除了非主属性对于码(键)的部分函数依赖。
  3NF:在2NF基础之上,消除了非主属性对于码(键)的传递函数依赖。
  BCNF:在3NF基础之上,消除了主属性对码(键)的部分函数依赖和传递函数依赖。

  1. 【答】在关系模式DB中,任何二元关系模式的最高范式必定是
      A.1NF
      B.2NF
      C.3NF
      D.BCNF

  1. 【问】在一个关系R中,若 每个数据项都是不可再分割 的,那么R一定属于()
      A.第一范式
      A.第二范式
      A.第三范式
      A.第四范式

本人博客详解 —— 数据库设计的1NF+2NF+3NF+BCNF的故事,只一篇就搞懂


  1NF:关系中的每个属性都不可分。

  1. 【问】在一个关系R中,若 每个数据项都是不可再分割 的,那么R一定属于()
      A.第一范式
      A.第二范式
      A.第三范式
      A.第四范式

视图

  1. 【问】视图是一个“虚表”,视图的构造基于( )
      A.基本表
      B.视图
      C.基本表或视图
      D.数据字典

视图从一个或几个基本表 ( 或其他视图 ) 导出的表
数据字典:是 描述数据的信息集合 ,是对系统中使用的所有数据元素的定义的集合。
  指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。
  是一种用户可以访问的记录数据库和应用程序元数据的目录。 主动数据字典 是指在对数据库或应用程序结构进行修改时,其内容可以由DBMS自动更新的数据字典。 被动数据字典 是指修改时必须手工更新其内容的数据字典。栗子如下:

  1. 【答】视图是一个“虚表”,视图的构造基于 基本表或视图

触发器

  1. 【问】触发器可以创建在( )中。
      A.表
      B.过程
      C.数据库
      D.函数

摘自 百度百科 —— 触发器 (数据库原理术语)


  触发器(trigger):SQL server 提供给程序员和数据分析员来 保证数据完整性 的一种方法,它是与表事件相关的特殊的存储过程。是 当对某一个表进行操作
  它的执行不是由程序调用,也不是手工启动,而是 由事件来触发 ,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。


作用
  可在写入数据表前, 强制检验或转换数据
  触发器发生错误时, 异动的结果会被撤销
  部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
  可依照特定的情况,替换异动的指令 (INSTEAD OF)。


分类(SQL Server 包括三种常规类型的触发器):
   DML 触发器 :当数据库 表中的数据发生变化时 ,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于 强制执行业务规则,以及扩展Sql Server约束,默认值 等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
   DDL 触发器 :主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它 在数据库结构发生变化时执行 ,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
   登录触发器 :将 在登录的身份验证阶段完成之后且用户会话实际建立之前激发 。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。

  1. 【答】触发器可以创建在 中。
  2. 在SQL Server中删除触发器用 DROP

索引

  1. 【问】 oracle 数据库中最常见的索引类型 是()
      A.文本索引
      B.反向键值索引
      C.位图索引
      D.b-tree索引

摘自 —— 牛客网评论

  1. b-tree索引
      Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。
      CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
  2. 位图索引(bitmap index)
       特定于该列只有几个枚举值 的情况,比如性别字段,标示字段比如只有0和1的情况。
  3. 基于函数的索引
       比如经常对某个字段做查询的时候是 带函数操作 的,那么此时建一个函数索引就有价值了。
  4. 分区索引和全局索引
      这2个是用于 分区表 的时候。前者是分区内索引,后者是全表索引。
  5. 反向索引(REVERSE)
      这个索引不常见,但是特定情况特别有效。
      「比如一个varchar(5)位字段(员工编号)含值(10001,10002,10033,10005,10016…)。这种情况默认索引分布过于密集,不能利用好服务器的并行,但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。」
    6.HASH索引
      HASH索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。集群键上不同值的数目必须在创建HASH集群之前就要知道。需要在创建HASH集群的时候指定这个值。使用HASH索引必须要使用HASH集群。
  1. 【答】 oracle 数据库中最常见的索引类型 是()
      A.文本索引
      B.反向键值索引
      C.位图索引
      D.b-tree索引
  2. 【问】 关于数据库索引,以下说法 错误 的是?
      A.针对某些字段建立索引,能够有效的减少相关数据库表的磁盘空间占用;
      B.针对某些字段建立索引,能够有效的提升相关字段的读与写的效率;
      C.常见数据库管理系统,通常使用hash表来存储索引;
      D.数据库索引的存在,可能导致相关字段删除的效率降低;

摘自 之前各大网站零碎的笔记 、 牛客网评论


索引越多数据库检索不一定越快:
  对于在查询中很少使用或者参考的列不应该创建索引。相反,由于增加了索引,反而降低系统的维护速度增大空间需求


  字段索引,会提高检索速度,降低写入速度。因为在插入字段时,还要添加索引,所以写入速度会降低。


本题解析:
  A. 索引需要额外的磁盘空间,一索引页,包含着索引记录,每条索引记录包含键值和逻辑指针。
  B. 索引不会提升写效率
  C. 常见数据库管理系统通常使用 B+树 来存储索引。(底层:B+树或者哈希表,但99%用B+树,因为哈希对范围查找支持很低
  D. 删除相关字段需要动态维护索引,故效率降低

  1. 【答】 关于数据库索引,以下说法 错误 的是?
      A.针对某些字段建立索引,能够有效的减少相关数据库表的磁盘空间占用;
      B.针对某些字段建立索引,能够有效的提升相关字段的读与写的效率;
      C.常见数据库管理系统,通常使用hash表来存储索引;
      D.数据库索引的存在,可能导致相关字段删除的效率降低;
  2. 【问】索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。以下对 索引的特点描述错误 的是:
      A.加快数据的检索速度
      B.加速表和表之间的连接
      C.在使用分组和排序子句进行数据检索时,并不会减少查询中分组和排序的时间
      D.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

摘自 牛客网评论


索引的特点
   加快检索数据的速度
  通过创建唯一性索引,可以 保证数据库表中每一行数据的唯一性
   加速表与表之间的连接
  查询语句汇总 含有分组或者排序的语句时,速度更快
  查询的过程中,使用索引、优化隐藏器,从而 提高系统的性能

  1. 【答】索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中数据。以下对 索引的特点描述错误 的是:
      A.加快数据的检索速度
      B.加速表和表之间的连接
      C.在使用分组和排序子句进行数据检索时,并不会减少查询中分组和排序的时间
      D.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  2. 【问】假设MySQL数据库表:
create table T(
       k INT UNSIGNED NOT NULL AUTO_INCREMENT,
       a DATE,
       b varchar(24),
       c INT,
       d varchar(24),
       PRIMARY KEY(k),
       UNIQUE KEY a_index(a DESC,b DESC),
       KEY k1(b),
       KEY k2(c),
       KEY k3(d)
)

  如下哪些sql语句查询能较好的利用索引 ?()
  A. select b from T WHERE b like ‘aaa%’;
  B. select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC;
  C. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC;
  D. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b;

摘自 牛客网评论


4个选项中的sql语句可以分为两类
  没有使用排序:(A),使用排序:(B,C,D)。
  对于 没有使用排序的查询 ,可以直接通过查询索引返回所需要的结果;对于 使用排序的查询语句 在利用索引的同时,排序是否也利用索引进行排序而不是进行外部排序(explain 中的using filesort)。


选项A . select b from WHERE b like ‘aaa%’:
  根据条件b查询,使用的是索引k1,由于通过索引查询,索引列包含结果b。(select b)因此只需要通过查询索引,而不需要在访问原表即可得到最终结果。
  like操作:like 中 %若位于开头则无法比较,只能全表扫描。


选项B. select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC:
  通过索引a_index(a,b)完成,而排序中的字段b,c无法通过索引直接来排序,因此需要再次使用外部排序最终获取结果。


选项C. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC:
  通过explain可以看到使用了a_index索引,由于a字段在查询时使用了常量,因此b满足最左前最的条件,可以使用索引排序。


选项D. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b:
  显然排序可以直接通过索引a_index完成,而不需要额外的filesort.

  1. 【答】假设MySQL数据库表:
      如下哪些sql语句查询能较好的利用索引 ?()
      A. select b from T WHERE b like ‘aaa%’;
      B. select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC;
      C. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC;
      D. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b;

文件

  1. 【问】扩展名为 DBC 的文件是
      A.表单文件
      B.数据库表文件
      C.数据库文件
      D.项目文件

摘自 知乎 —— DBC文件到底是个啥


  DBC是Database Can的缩写,代表CAN的数据库文件,在这个文件中把CAN通讯的信息定义的非常完整清楚,CAN网络的通讯依据这个文件的描述进行。DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。

  1. 【答】扩展名为 DBC 的文件是
      A.表单文件
      B.数据库表文件
      C.数据库文件
      D.项目文件

日志

  1. 【问】数据库运行于哪种状态下可以 防止数据的丢失
      A.Archivelog状态
      B.No archivelog状态
      C.非归档模式
      D.以上答案均不对

摘自 牛客网评论


归档模式(Archivelog):可以 在线或离线备份数据库 ,可以是 全备份或者是部分备份(单个表空间|数据文件) ;能够做到零数据丢失,但是归档会消耗一些存储和性能资源。
非归档模式(No-Archivelog):只能 离线备份 而且必须备份 所有的数据文件,控制文件,日志文件查询运行模式

  1. 【答】数据库运行于哪种状态下可以 防止数据的丢失
      A.Archivelog状态
      B.No archivelog状态
      C.非归档模式
      D.以上答案均不对

E-R

1.【问】当 局部 E-R 图合并成全局 E-R 图 时可能出现 冲突不属于 合并冲突的是( )。
  A.属性冲突
  B.语法冲突
  C.结构冲突
  D.命名冲突

摘自 CSDN —— 合并分ER图产生的冲突


夜晚的海滨小镇 - 皮璐宇
   子系统E-R图之间的冲突主要有三类: 属性冲突①、 命名冲突②和 结构冲突③。
【注】
①属性冲突:
  属性值的 类型 取值范围 取值集合 不同
②命名冲突:
  同名异义、异名同义
③结构冲突:
  1. 同一对象在不同应用中具有不同的抽象
(职工在某一局部应用中被当作实体,而在另一局部应用中则被当作属性)
  2. 同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同
  3. 实体间的联系在不同的E-R图中为不同的类型
(实体E1与E2在一个E-R图中是多对多联系,在另一个E-R图中是一对多联系)
1.【答】当 局部 E-R 图合并成全局 E-R 图 时可能出现 冲突不属于 合并冲突的是( )。
  A.属性冲突
  B.语法冲突
  C.结构冲突
  D.命名冲突


故障

1.【问】若系统在允许过程中,由于某种 硬件故障,使存储在外存上的数据部分损失或全部损失 ,这种情况称为( )。
  A.事务故障
  B.系统故障
  C.介质故障
  D.运行故障

摘自 牛客网评论


数据库常见四种故障
事务内部故障
  分为预期的和非预期的,大部分为预期的。
  预期的事务内部故障:可以通过事务程序本身发现的事务内部故障; 非预期的事务内部故障:不能由事务程序处理的,如运算溢出故障、并发事务死锁故障、违反了某些完整性限制而导致的故障等。
系统故障(软故障)
  数据库在运行过程中,由于 硬件故障数据库软件操作系统的漏洞突然停电灯情况,导致系统停止运转,所有正在运行的事务以非正常方式终止,需要系统重新启动的一类故障。这类事务 不破坏数据库,但是影响正在运行的所有事务
介质故障(硬故障)
  主要指数据库在运行过程中,由于 磁头碰撞磁盘损坏强磁干扰天灾人祸等情况,使得数据库中的 数据部分或全部丢失的一类故障。
计算机病毒故障
  一种恶意的计算机程序,它可以像病毒一样繁殖和传播,在对计算机系统造成破坏的同时也可能对数据库系统造成破坏(破坏方式以数据库文件为主) 。
1.【问】若系统在允许过程中,由于某种 硬件故障,使存储在外存上的数据部分损失或全部损失 ,这种情况称为( )。
  A.事务故障
  B.系统故障
  C.介质故障
  D.运行故障


SQL语句

  1. 【问】下列关于数据库 执行SQL语句的操作步骤 描述正确的是
      A.解析并编译SQL语句
      B.确定并优化数据获取路径
      C.执行SQL,获取并返回数据
      D.以上都正确

摘自 SQL语句执行过程详解 —— thychan(简书)


SQL语句执行原理: 客户端把语句传送到服务器端执行 ——> 语句解析查询高速缓存 ——(如果Cache里没有对应) ——> 语句合法性检查 ——> 语言含义检查① ——> 获得对象解析锁 ——> 数据访问权限的核对 ——> 确定最佳执行计划②】 ——> 语句执行③ ——> 提取数据
注:
语言含义检查:对语句中的字段、表等内容进行检查。
确定最佳执行计划:当服务器进程的优化器确定这条查询语句的最佳执行计划后,就会将这条 SQL 语句与执行计划保存到数据高速缓存。如此的话,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行 SQL 语句,提高 SQL 语句处理效率。
语句执行:若被选择行所在的数据块已经被读取到数据缓冲区,则服务器进程会直接把这个数据传递给客户端;若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中。
提取数据:把查询到的数据结果返回给用户端进程。

  1. 【答】下列关于数据库 执行SQL语句的操作步骤 描述正确的是
      A.解析并编译SQL语句
      B.确定并优化数据获取路径
      C.执行SQL,获取并返回数据
      D.以上都正确
  2. SELECT语句中 “SELECT DISTINCT” 表示查询结果中 去掉重复的行
  3. 【问】对基本表 S,执行操作 DROP TABLES RESTRICT 的作用是()。
      A.删除基本表 S 中的所有元组
      B.把基本表 S 及产生的一切视图全部删除
      C.当没有由 S 中的列产生的视图或约束时将表 S 删除
      D.删除表 S,将引用表 S 的视图中的一切视图的属性值置为空值

摘自 牛客网评论


CASCADE:表的删除没有限制条件,在 删除基本表的同时,相关的依赖对象(如视图)将被删除
RESTRICT:表的删除是有条件限制的,要 删除的基本表不能被其他表的约束所引用不能有视图不能有触发器不能有存储过程或函数 。如果存在这些依赖该表的对象,则表不能被删除

  1. 【答】对基本表 S,执行操作 DROP TABLES RESTRICT 的作用是()。
      A.删除基本表 S 中的所有元组
      B.把基本表 S 及产生的一切视图全部删除
      C.当没有由 S 中的列产生的视图或约束时将表 S 删除
      D.删除表 S,将引用表 S 的视图中的一切视图的属性值置为空值
  2. 【问】关于数据库,下列描述中,正确的是()
      A.having 和where都是用来筛选用的,having是筛选组,而where是筛选记录
      B.在sql中,关键字delete表示直接删除表,而drop表示删除表中数据

摘自 之前学习各大网站的笔记拼凑


删除表的语句droptruncatedelete


定义
  drop: 完全删除表,包括表结构,释放空间。将 删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是 变为invalid状态
  delete: 删除表数据,不释放空间,保留表的结构。可以 加where,只删除一行或者多行
  truncate: 只能删除表数据,释放空间,会保留表结构不能加where, 对于 由 FOREIGN KEY 约束引用的表以及参与了索引视图的表都不可用


相同点与不同点
相同:truncate 和不带 where 子句的 delete, 以及 drop 都会删除表内的数据。
不同:

  1.   truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index);但依赖于该表的存储过程/函数将保留, 只是变为 invalid 状态。
  2.   delete 语句是 dml(数据操纵语言insert, update, delete), 这个操作 会放到回滚段中, 事务提交之后才生效; 如果有相应的触发器,执行的时候将被触发。 truncate, drop 是 ddl(数据定义语言【create(创建), alter(修改), drop(删除), rename(重命名), truncate(删除表中的数据)】), 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。
  3.   delete 语句不影响表所占用的 extent, 高水线(high watermark)保持原位置不动 。 drop 语句 将表所占用的空间全部释放 。 truncate 语句缺省情况下将空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。
  4. 速度:一般来说: drop > truncate > delete
  5. 安全性: 小心使用 drop 和 truncate, 尤其没有备份的时候。

Truncate 和 delete对比

  1.   truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不一样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate 命令删除的数据是不可以恢复的。
  2.   DELETE 语句每次删除一行,就在事务日志中 为所删除的每行记录一项TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中 记录页的释放。TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变,新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE
  3.   在删除时如果 遇到任何一行违反约束(主要是外键约束), TRUNCATE TABLE仍然删除,只是表的结构及其列、约束、索引等保持不变,但 DELETE是直接返回错误
  4.   对于 由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而 应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。TRUNCATE TABLE 不能用于参与了索引视图的表


       删除部分数据行用 delete, 注意带上 where 子句,回滚段要足够大 删除表, 用 drop 想保留表而将所有数据删除,如果和 事务无关, 用 truncate 即可; 如果和 事务有关, 或者想触发 trigger, 还是 用 delete
    如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。

where在分组前过滤,having在分组后过滤,两者之间不冲突。

  1. 【答】关于数据库,下列描述中,正确的是()
      A.having 和where都是用来筛选用的,having是筛选组,而where是筛选记录
      B.在sql中,关键字delete表示直接删除表,而drop表示删除表中数据

  2. 【问】订单表 ( 订单号,雇员代号,地区代号,订购日期 ) 中订单号为主键,要 删除订单中前三年以前的信息, SQL 为:
      A.delete from 订单表 where 订购日期<getdate()+3
      B.delete from 订单表 where 订购日期<DATEADD(yy,3,getdate())
      C.delete from 订单表 where 订购日期<getdate()-3
      D.delete from 订单表 where 订购日期<DATEADD(yy,-3,getdate())

摘自 牛客网评论


DATEADD() 函数:在日期中添加或减去指定的时间间隔。
DATEADD(datepart①,number②,date③)
【注】
①datapart取值范围 :{yy/yyyy,qq/q,mm/m,dy/y,dd/d,wk/ww,dw/w,hh,mi/n,ss/s,ms,mcs,ns}
②number :希望添加的间隔数
③date :合法的日期表达式

  1. 【答】订单表 ( 订单号,雇员代号,地区代号,订购日期 ) 中订单号为主键,要 删除订单中前三年以前的信息, SQL 为:
      A.delete from 订单表 where 订购日期<getdate()+3
      B.delete from 订单表 where 订购日期<DATEADD(yy,3,getdate())
      C.delete from 订单表 where 订购日期<getdate()-3
      D.delete from 订单表 where 订购日期<DATEADD(yy,-3,getdate())

  2. 关系规范化中的插入操作异常是指 应该插入的数据未被插入

插入异常:该插入的没插入
删除失败:该删除的没删除
删除异常:不该删除的被删除


MySQL

  1. 【问】 mysql 导出数据命令 是?
      A.grant
      B.mysqldump
      C.mysqlimport
      D.source

摘自 牛客网评论


导出整个数据库
  mysqldump -u 用户名 -p 数据库名 > 导出的文件名
  mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
导出一个表
  mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
  mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
导出一个数据库结构:
  mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
  -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

  1. 【答】 mysql 导出数据命令 是?
      A.grant
      B.mysqldump
      C.mysqlimport
      D.source

SQL Server

  1. 【问】SQL Server 支持哪几种 备份
      A.数据库备份
      B.事务日志备份
      C.差异备份①
      D.文件和文件组备份②

摘自 Microsoft —— 备份文件和文件组


【注】
  ①差异数据库备份:记录自上次完全数据库备份之后对数据库的更改的数据库备份
  ②文件和文件组备份:当数据库大小和性能要求使完整数据库备份显得不切实际,则可以创建文件备份。 文件备份包含一个或多个文件(或文件组)中的所有数据

  1. 【答】SQL Server 支持哪几种 备份
      A.数据库备份
      B.事务日志备份
      C.差异备份①
      D.文件和文件组备份②

    2.【问】以 MySQL 5.7 或更低版本为准的数据库中,如何 正确选择和使用合适的数据类 ()
      A.更小通常更好
      B.尽量用最简单的数据类型
      C.尽量不使用 Null 作为字段值
      D.字符串较长时优先用 Text 数据类型

摘自 CSDN —— MySQL数据库开发的36条原则


避免使用NULL字段
  NULL字段弊端:很难进行查询优化;NULL列加索引,需要额外空间;含NULL复合索引无效
举例:
  a char(32) DEFAULT NULL 【不推荐】
  b int(10) NOT NULL 【不推荐】
  c int(10) NOT NULL DEFAULT 0 【推荐】


少用并拆分TEXT/BLOB
  TEXT类型处理性能远低于VARCHAR ,其强制生成硬盘临时表,浪费更多空间
  如果业务需要必须用,建议拆分到单独的表
举例:

CREATE TABLE t1 (
   id INT NOT NULL AUTO_INCREMENT,
   data TEXT NOT NULL,
   PRIMARY KEY(id)
) ENGINE=InnoDB;

2.【答】以 MySQL 5.7 或更低版本为准的数据库中,如何 正确选择和使用合适的数据类 ()
  A.更小通常更好
  B.尽量用最简单的数据类型
  C.尽量不使用 Null 作为字段值
  D.字符串较长时优先用 Text 数据类型


Access(微软发布的关系数据库管理系统)

  1. 在 Access 中,日期型数据用“ #    # ”括起来。

2.【问】 在Access数据库中,对数据表进行删除的是()
  A.总计查询
  B.操作查询
  C.选择查询
  D.删除查询

摘自 牛客评论


  操作查询包括生成表查询① 、删除查询 ②、更新查询 ③和追加查询④ 等4种。
【注】
 ①生成表查询:利用一个或多个表中的全部或部分数据创建新表
 ②删除查询:从一个或多个表中删除一组记录,将删除整个记录,而不是只是记录所选择的字段
 ③更新查询:对一个或多个表中的一组记录作全部更新
 ④追加查询:从一个表中将一组记录添加到一个或多个表的尾部。

2.【答】 在Access数据库中,对数据表进行删除的是 操作查询


Visual FoxPro

1.【问】在Visual FoxPro 中,关系数据库管理系统所管理的关系
  A.一个DBF文件
  B.若干个二维表
  C.一个DBC 文件
  D.若干个DBC 文件

摘自 牛客网评论


  在关系模型的概念中, 一个关系就是一张二维表 ,每个关系有一个关系名。在Visual FoxPro中,一个关系存储为一个文件,文件名扩展名为.dbf,称为“表”。
1.【答】在Visual FoxPro 中,关系数据库管理系统所管理的关系
  A.一个DBF文件
  B.若干个二维表
  C.一个DBC 文件
  D.若干个DBC 文件


你也曾喜欢洁白的雪吗,sincerely,end.



更多推荐

数据库+SQL专场(持续输出)