Java学习手册:数据库原理


一、SQL语言的功能有哪些?

SQL是结构化查询语言的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四部分。

1、数据查询select(选择符合条件的记录)
2、数据操纵(DML)insert(插入一条记录)、update(更新语句)、delete(删除记录)、select(选择记录)
3、数据定义(DDL)create(数据表的建立)、drop(数据表的删除)、alter(数据表的更改)
4、数据控制(DCL)grant(为用户授予系统权限)、revoke(收回系统权限)


二、内连接与外连接的区别

内连接,也成为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢失。(内连接是保证两个表中所有行都满足连接条件)

外连接,外连接不仅包含符合连接条件的行,而且还包括坐标(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

内连接只显示符合连接条件的记录,外连接除了显示符合连接条件的记录外,还显示表中的记录。


三、什么是事务?

事务是数据库中一个单独的执行单元(Unit),它通常由高级数据库操作语言(例如SQL)或者编程语言(例如C++,Java等)编写的用户程序的执行所引起的。

事务必须满足四个属性,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),即ACID4种属性。

(1)原子性整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

(2)一致性一个事务执行之前和执行之后,数据库数据必须保持一致性状态

(3)隔离性:如果有两个或多个事务并发执行时,为了保证数据的安全性,将一个事务内部的操作与事务的操作隔离起来,不被其他正在进行的事务看到

(4)持久性在事务完成以后,该事务对数据库所作的更改便永久的保存在数据库之中,并不会被回滚。当系统或介质发生故障时,该修改也永久保持。

一般情况下,通过执行COMMIT或ROLLBACK语句来终止事务,当执行COMMIT语句时,自事务启动以来对数据库所做的一切更改就成为永久性的了,即被写入磁盘;而当执行ROLLBACK语句时,自事务启动以来对数据库所做的一切更改都会被撤销,并且数据库中内容返回到事务开始之前所处的状态。


四、不同范式之间的区别

常见的范式有:1NF、2NF、3NF、BCNF以及4NF

(1)1NF(第一范式)第一范式是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。第一范式的模式要求属性值不可再分裂成更小部分,即属性项不能是属性组合或由组属性组成。简而言之,第一范式就是无重复的列。

(2)2NF(第二范式):第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以被唯一的区分

(3)3NF(第三范式):如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。

(4)BCNF:它构建在第三范式的基础上,如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,那么称R为BCNF的模式。

(5)4NF(第四范式):设R是一个关系模式,D是R上的多值依赖集合。如果D中存在多值依赖X→Y时,X必是R的超键,那么称R是第四范式的模式。


五、什么是触发器?

触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手工启动,当数据库有特殊操作时,这些操作由数据库中的事件来触发,自动完成这些SQL语句。使用触发器可以用来保证数据的有效性和完整性,完成比约束更复杂的数据约束。

根据SQL语句的不同,触发器可以分为DML触发器DLL触发器。DML触发器是当数据库服务器发生数据操作语言事件时执行的存储过程,有After和Instead Of这两种触发器。After触发器被激活触发是在记录改变之后进行的一种触发器。Instead Of触发器是在记录变更之前,去执行触发器本身所定义的操作,而不是执行原来SQL语句里的操作。DLL触发器是在响应数据定义语言事件时执行的存储过程。

触发器分为事前触发事后触发,事前触发发生在事件发生之前,用于验证一些条件或进行一些准备工作;事后触发发生在事件发生之后,做收尾工作。事前触发可以获得之前和新的字段值,而事后触发可以保证事务的完整性。


六、什么是游标(Cursor)?

游标(Cursor) 是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理。

游标有以下两个优点:
(1)在使用游标的表中,对行提供删除和更新的功能。
(2)游标将面向集合的数据库管理系统和面向行的程序设计连接了起来。


七、如果数据库日志满了,会出现什么情况?

日志文件(Log File)记录所有对数据库数据的修改,主要是保护数据库以防故障发生,以及恢复数据时使用。其特点如下:
(1)每一个数据库至少包含两个日志文件组。每个日志文件组至少包含两个日志文件成员。
(2)日志文件组以循环方式进行读写操作。
(3)每一个日志文件成员对应一个物理文件。

通过日志文件来记录数据库事务可以最大限度地保证数据地一致性与安全性,但一旦数据库中日志满了,就只能执行查询等读操作,不能执行更改、备份等操作,原因是任何写操作都要记录日志,因此数据库基本上处于不能使用的状态。


八、union和union all有什么区别?

union在进行表求并集后会去掉重复的元素,所以会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

union all只是简单地将两个结果集合并后就返回结果。因此,如果返回地两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据。

在执行查询操作时,union all要比union快很多。


九、什么是视图?

视图是从数据库的基本表中选取出来的数据组成的逻辑窗口,与基本表不同,它是一个虚表。在数据库中,存放的只是视图的定义,而不存放视图包含的数据项,这些项目仍然存放在原来的基本表结构中。通过引入视图机制,用户可以将注意力集中在其关心的数据上(而非全部数据),这样就大大提高了用户效率与用户的满意度。定义视图可以将表与表之间的复杂的操作连接和搜索条件对用户不可见,用户只需要简单地对一个视图进行查询即可,因此,视图增加了数据的安全性,但不能提高查询的效率

视图的作用主要有以下几点:
(1)简化数据查询语句。
(2)使用户能从多角度看待同一数据。
(3)提高数据的安全性。
(4)提供了一定程度的逻辑独立性。


十、数据库的隔离级别

  • Serializable(串行化):可避免脏读、不可重复读、幻读的发生。
  • Reoearable read(可重复读):可避免脏读、不可重复读的发生。
  • Read committed(读已提交):可避免脏读的发生。
  • Read uncommitted(读未提交):最低级别,任何情况都无法保证。

(1)脏读:指在一个事务处理过程里读取了另一个未提交的事务中的数据。
(2)不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值。(由于在查询间隔,被另一个事务修改并提交了)
(3)虚读(幻读):幻读是事务非独立执行时发生的一种现象。幻读和不可重复读都是读取了另一条已经提交的事务,不同的是:不可重复读查询的是同一个数据项,而幻读针对的是一批数据整体。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值