Java程序员面试宝典笔记记录-第6章数据库原理笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YuYunTan/article/details/83382344

前言

  本次博文对何昊出版的《java程序员面试宝典》的第6章数据库原理部分的概括笔记,删除其中部分代码,试题和一部分相对简单的内容题目。

相关题目

在这里插入图片描述

delete与truncate区别?

  都可以删除表中数据。

不同
  1)truncate是数据定义语言(DDL),会被隐式提交,一旦执行不可回滚。delete执行的过程是每次从表中删除一行数据,同时将删除操作以日志形式保存,以便将来回滚操作。
  2)delete操作后,被删除数据占用的存储空间还在,还可以恢复。而用truncate操作删除数据后,被删除的数据会立即释放空间,被删除的数据是不能被恢复。
  3)truncate执行效率比delete快。

内连接与外连接区别?

  内连接(自然连接),只有两个表相匹配的行才在结果集出现,返回是两表所有相匹配的数据,舍弃不匹配结果(可能造成信息丢失)。
  内连接保证两表所有行都满足连接条件,外连接不然。不仅包含符合条件的行,还包括左表(左外连),右表(右外连),或两个边接表(全外连接)所有数据行。

事务是什么?

  数据库单独执行单元。满足四个属性,原子性,一致性,隔离线和持久性。ACID。

  (1) 原子性

数据修改要么全执行,要么全部执行,不允许部分完成。

  (2)一致性

事务执行前后保持一致性状态。

  (3)隔离性

将一个事务内部操作与事务操作隔离,不被其他正在进行的事务看到。四种隔离级别:不提交读,提交读,可重复读,串行化。

  (4)持久性

事务完成后,保证对数据修改是永久性,即使系统或介质发生故障也能永久保持。(数据库备份和恢复保证)

  ACID由数据库管理系统保证,一般用COMMIT和ROLLBACK终止事务。前者使得事务更改永久,被写入磁盘。后者,使得更改被撤销,回到事务开始前状态,保证一致状态。

存储过程是什么?与函数区别与联系?

  将完成特定的SQL语句集进行编译优化存储到数据库服务器,通过指定存储过程名字调用。

create procedure sp_name @\[参数名\]\[ 类型 ] as begin ... end

调用 exec sp_name \[参数名]

删除 drop  procedure sp_name

存储过程不等于函数,区别

  1)存储过程是作为独立部分执行,函数是查询语句一个部分,函数可以返回一个对象,可以在查询语句位于From后面。

  2)存储过程功能复杂,函数具有针对性功能

  3)函数用括号包含输入参数,且只能返回值或表对象。存储过程可以返回多个参数

  4)函数可以嵌入SQL语句使用,可在select中调用,存储过程不行

  5)函数不直接操作实体表,只能操作内建表

  6)存储过程在创建时在服务器进行编译,执行速度快于函数

各种范式区别?

  (1)1NF(无重复列)

数据库表每一列都是不可分割基本数据项,同一列不能有多个值,即实体中某个属性不能有多个值或不能有重复的数学。

如果出现重复属性,就需要定义新实体,实体由重复属性构成。新实体与原实体之间为一对多关系。

要求属性值不可再分裂更小部分,属性项不能是属性组合或由组属性组成

  (2)2NF(非主属性完全函数依赖于R的某个候选键)

在第一范式基础上建立。要求实例或行必须唯一地区分。

为实现区别通常加一列,存储实例的唯一标识

  (3)3NF(非主属性对码不存在部分依赖,不存在传递依赖)

R是第二范式,且每个非主属性都不传递于R的候选键,则是第三范式

  (4)BCNF(不存在关键字段决定关键字段)

在3NF基础上。

R是第一范式,每个属性都不传递依赖R的候选键,称R是BCNF模式

  (5)4NF(至多一个多值)

R是关系模式,D是R上的多值依赖。如果D中存在多值依赖X->Y,X必是R的超键,则R是第四范式。

什么是触发器?

  触发器是特殊存储过程,由事件触发。

  触发器可以用来保证数据有效性和完整性,完成比约束更复杂的数据约束。

触发器 存储过程
当某类数据操作DML语句发生时隐式地调用 从一个应用或过程中显式地调用
在触发器体内禁止使用COMMIT和ROLLBACK语句 在过程体内可以使用所有PL/SQL块中都能使用的SQL语句,包括COMMIT和ROLLABACK语句
不能接受参数输入 可以接受参数输入

  根据SQL语句,分DML和DLL触发器

  DML是数据库服务器发生数据操作语言时执行的存储过程,有After和Instead of这两种触发器。After触发器被激活触发是在记录改变之后进行的一种触发器。Instead of触发器是记录更改之前,去执行触发器本身送定义的操作,而不是执行原来SQL语句里的操作。

  DLL触发器是在响应数据定义语言事件时执行的存储过程。

触发器的主要作用

  1)增加安全性;

  2)利用触发器记录所进行的修改以及相关信息,跟踪用户对数据库的操作,实现审计。

  3)维护那些通过创建表时的声明约束不可能实现的复杂的完整性约束以及对数据库中特定事件进行监控与响应。

  4)实现复杂的非标准的数据库相关完整性规则、同步实时地复制表中的数据。

  5)触发器是自动的,它们对表的数据做了任何修改之后就会被激活。

事前触发和事后触发的区别?语句级触发和行级触发的区别?

  事前触发发生在事件发生之前,用于验证一些条件或进行一些准备工作。

  事后触发发生在事件发生之后,做收尾工作。

  事前触发可以获得之前和新的字段值,而事后触发可以保证事务完整性。

  语句级触发可以在语句执行之前或之后执行,行级触发在触发器所影响的每一行触发一次。

什么是游标?

  游标提供一种对表中检索出的数据进行操作的灵活手段,实际上是一种能从包含多条数据记录的结果集中每次提取一条记录的机制。

  游标总与一条SQL选择语句关联,因为其是由结果集(0,1或多条记录)和结果集中指向特定记录的游标位置组成。

  当决定对结果集进行处理时,必须声明一个指向该结果集的游标。

  游标允许对查询语句select返还的行结果集中的每一行进行相同或不同操作,而不是一次对整个结果集进行同一种操作。还提供基于游标位置而对表中数据进行删除更新的功能。

  游标还把作为面向集合的数据库管理系统和面向行的程序设计连接,使得两者能“沟通”。

数据库日志满了,出现什么情况?

  日志文件记录对数据库数据修改,保护数据库以防故障发生和恢复数据使用,其特点如下:

  1)每个数据库至少包含两个日志文件组,每个日志文件组至少包含两个日志文件成员。

  2)日志文件组以循环方式进行写操作

  3)每一个日志文件成员对应一个物理文件

日志文件记录数据库事务最大限度保证数据一致性和安全性。

  一旦满了,只能支持查询等读操作,不能更改、备份等操作,因为写操作要记录日志。基本处于不能使用状态。

union和union all区别?

  前者进行表求并集后去掉重复元素,会对结果集排序,删除重复记录返回结果。

  后者简单结果集合并返回结果,包含重复元素,运行速度快于前者。

什么是视图?

  视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,是虚表。

  数据库存放的是视图定义而不是视图包含数据项。

视图作用

  简化数据查询语句;使用户能从多角度看待同一数据;引入视图可以提高数据安全性;提供一定程度逻辑独立性。

  引入视图,可以注意力集中在其关心的数据上(而非全部),大大提高用户效率和满意度。

  视图使得繁琐的查询语句(源于多表等的情况)变得简单可行。连接操作对用户不可见,用户只需关心视图进行查询,增加数据安全性但并不提高查询效率。

结语

  本次博文对何昊出版的《java程序员面试宝典》的第6章数据库原理部分的概括笔记,希望对他人和以后自己有帮助。

猜你喜欢

转载自blog.csdn.net/YuYunTan/article/details/83382344