Java笔记之数据库原理

1.信息:信息是关于现实世界事物的存在方式或运动状态反映的综合。
2.信息的特征:信息源于物质和能量。信息是可以感知的。信息是可存储、加工、传递和再生的。
3.数据:数据是用来记录信息的可识别的符号,是信息的具体表现形式。可用多种不同的数据形式表示同一信息,而信息不随数据形式的不同而改变。
4.数据与信息:数据是信息的符号表示或载体,信息则是数据的内涵,是对数据的语义解释。
5.数据处理:是将数据转换成信息的过程,包括对数据的收集、存储、加工、检索和传输等一些列活动。其目的是从大量的原始数据中抽取和推导出有价值的信息,作为决策依据。可以简单表示:信息=数据+处理。
6.数据处理的中心问题是数据管理。数据管理是指对数据进行组织化、分类、编码、存储、检索和维护。随着计算机硬件和软件的发展,数据管理经历了人工管理阶段、文件系统阶段和数据库系统阶段三个阶段。
7.人工管理阶段数据的特点:数据不保存;系统没有专用的软件对数据进行管理;数据不共享;数据不具有独立性。
8.文件系统阶段数据的特点:数据以文件形式长期保存;文件系统可以对数据的存取进行管理;文件形式多样化;程序与数据间有一定独立性。
9.较人工管理阶段,文件系统阶段对数据的管理有了很大的进步,但一些根本性的问题仍没有彻底解决,主要表现在三个方面:数据冗余度大、数据独立性差、数据一致性差。
10.数据库系统阶段数据的特点:数据共享性高、冗余低;数据结构化;数据独立性高;有统一的数据控制功能(数据的安全性控制、数据的完整性控制、并发控制、数据恢复)。
11.数据库系统的组成:是指在计算机系统中引入数据库后的系统构成,主要由数据库、数据库用户、计算机硬件系统、计算机软件系统等几部分组成。
12.数据库:是存储在计算机内有组织的大量共享数据的集合,可以供用户共享,具有尽可能小的冗余度和较高的数据独立性,使得数据存储最优,数据最容易操作,并且具有完善的自我保护能力和数据恢复能力。数据库具有的特点:集成性、共享性。
13.数据库用户:是指使用数据库的人,可以对数据库进行存储、维护、和检索等操作。用户分为三类:终端用户(End User)、应用程序员(Application Programmer)、数据库管理员(DataBase Administrator,DBA)。
14.数据库的建立、维护等工作只靠数据库管理系统(DBMS)本身是不够的,还必须有专门的人员来完成,这类人就是数据库管理员(DBA)。DBA的主要职责:参与数据库设计的全过程,决定整个数据库的结构和信息内容;帮助终端用户使用数据库系统;定义数据的安全性和完整性,负责分配用户对数据库的使用权限和口令管理等数据库访问策略;监督控制数据库的使用和运行,改进和重新构造数据库系统。
15.软件系统:主要包括数据库管理系统(DBMS)及其开发工具、操作系统和应用系统等。在计算机的硬件层之上,由操作系统统一管理计算机资源,DBMS可以借助操作系统完成对硬件的访问,并能对数据库的数据进行存取、维护和管理。另外,数据库系统的各类人员、应用程序等对数据库的各种操作请求,都必须通过DBMS完成。DBMS是数据库系统的核心软件。
16.硬件系统:之存储和运行数据库系统的硬件设备。包括CPU、内存、大容量的存储设备、外部设备等。
17.数据库系统的结构:从数据库管理系统的角度看,数据库系统通常采用三级模式结构,这是数据库系统内部的体系结构;从数据库最终用户的角度看,数据库系统的结构分为集中式结构、分布式结构和客户/服务器结构,这是数据库系统外部的体系结构。
18.数据库系统的三级模式结构:数据库内部的体系结构可以分为三级,即外模式、概念模式、内模式。对用户而言,可以对应地分为一般用户级模式、概念级模式、物理极模式。模式,是数据库中全体数据的逻辑结构和特征的描述,是对记录型的描述,与具体的值无关。
19.外模式:是数据库内部三级结构的最外层,又称子模式或用户模式,它是用户看到并允许使用的那部分数据的逻辑结构(外视图,也称为用户级数据库)。
20.概念模式:简称模式,是数据库中全体数据的逻辑结构和特征的描述。处于数据库内部三级结构的中间层,是整个数据库实际存储的抽象表示,包含了数据库的整体逻辑。同时它也是对现实世界的一个抽象,是现实世界某应用环境的所有信息内容集合的表示,也是个别用户视图综合起来的结果(又称用户共同视图,概念视图,概念级数据库,DBA视图)。
21.内模式:又称存储模式(物理级数据库,系统程序员视图),是数据库内部三级结构的最内层,也是靠近物理存储的一层,是对数据库存储结构的描述,是数据在数据库内部的表达方式。
22.在数据库系统中,外模式可以有多个,而概念模式和内模式只有一个。对一个数据库系统来说,实际存在的只是物理级数据库,概念级数据库只不过是物理级数据库的一种抽象表示,用户级数据库是用户与数据库的接口。用户通过子模式进行的操作,通过子模式到模式的映象与概念级数据库联系起来,由通过模式到存储模式的映象与物理级数据库联系起来。事实上,DMBS的中心工作之一就是完成三级数据库见的转换,把用户对数据库的操作转换到物理级去执行。
23.数据库三级模式结构的优点:保证数据的独立性。将模式和内模式分开,保证了数据的物理独立性;将外模式与模式分开,保证了数据的逻辑独立性。简化了用户接口。按照外模式编写应用程序或输入命令,而不需要了解数据库内部的存储结构,方便用户使用系统。有利于数据共享。在不同的外模式下可有多个用户共享系统中数据,减少了数据冗余。利于数据的安全保密。在外模式下根据要求进行操作,只能对限定的数据操作,保证了其他数据的安全。
24.数据库系统的二级映象:模式/内模式映象(唯一)。它确定了数据的全局逻辑结构与存储结构之间的对应关系,通过该映象功能保证数据存储结构的变化不影响数据的全局逻辑结构的改变,从而不必修改应用程序,即确保了数据的物理独立性。外模式/模式映象(多个)。它确定了数据的局部逻辑结构与全局逻辑结构之间的对应关系,该映象功能保证了数据的局部逻辑结构不变。由于应用程序是依据数据的局部逻辑结构编写的,所以应用程序不必修改,从而保证了数据与程序间的逻辑独立性。
25.DBMS的主要功能:数据定义、数据操纵、数据库运行管理、数据库的建立和维护功能、数据通信接口。
26.数据定义:DBMS提供数据定义语言(Data Define Language,DDL)定义数据的模式、外模式和内模式三级模式结构,定义模式/内模式外模式/模式二级映象,定义有关的约束条件。
27.数据操纵:DBMS提供数据操纵语言(Data Manipulation Language,DML)实现对数据库的基本操纵,包括检索、插入、修改、删除等。DML有两类:一类是自主型的或自含型的,属于交互式命令语言,语法简单,可独立使用;另一类是宿主型的,它把对数据库的存取语句嵌入在如C等高级语言中,不能单独使用。SQL语言就是DML的一种。
28.数据库运行管理:对数据库的运行进行管理是DBMS运行的核心部分。DBMS通过对数据库的控制以确保数据正确有效和数据库系统的正常运行。DBMS对数据库的控制主要通过四个方面实现:数据的安全性控制、数据的完整性控制、多用户环境下的并发控制、数据库的恢复。
29.数据库的建立和维护功能:数据库的建立和维护包括数据库的初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能。
30.数据通信接口:DMBS提供与其他软件系统进行通信的功能。一般,DMBS提供了与其他DBMS或文件系统的接口,从而使该DBMS能够将数据转换为另一个DBMS或文件系统能够接受的格式,或者可接收其他DBMS或文件系统的数据,实现用户程序与DBMS、DBMS与DBMS、DBMS与文件系统之间的通信。通常这些功能要与操作系统协调完成。
31.DBMS的组成:语言编译处理程序,系统运行控制程序,系统建立、维护程序,数据字典。
32.语言编译处理程序:DDL编译程序,DML编译程序。
33.系统运行控制程序:系统总控程序,安全性控制程序,完整性控制程序,并发控制程序,数据存取和更新程序,通信控制程序,事务管理程序,运行日志管理程序等。
34.系统建立、维护程序:装配程序,重组程序,系统恢复程序。
35.数据字典:用来描述数据库中有关信息的数据目录,包括数据库的三级模式、数据类型、用户名和用户权限等有关数据库系统的信息,起着系统状态的目录表的作用,帮助用户、DBA和DBMS本身使用和管理数据库。
36.DBMS的数据存取过程:用户使用某种特定的数据操作语言向DBMS发出存取请求;DBMS接受请求并解释;DBMS依次检查外模式、外模式/模式映象、模式、模式/内模式映象及存储结构定义;DBMS对存储数据库执行必要的存取操作。以上存取过程中还包括安全性控制、完整性控制,以确保数据的正确性、有效性和一致性。
37.数据模型:模型就是对现实世界的抽象。数据模型是模型的一种,是现实世界数据特征的抽象。通常由数据结构、数据操作、数据的约束条件三个要素组成。
38.数据结构:用于描述系统的静态特性,有层次结构、网状结构、关系结构三种类型。通常按照数据结构的类型来命名数据模型,所以对应的有层次模型、网状模型、关系模型。
39.数据操作:用于描述系统的动态特性。是数据库中各种数据的操作集合,包括操作及相应的操作规则,如数据的检索、插入、删除和修改操作等。数据模型必须定义这些操作的确切含义、操作规则以及实现操作的语言。
40.数据的约束条件:是一组完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
41.三个世界的划分:现实世界,信息世界,计算机世界。
42.信息世界中的相关概念:实体(Entity),属性(Atttributes),实体型(Entity Type),实体集(Entity Set),键(Key),域(Domain),联系(Relationship)。
43.两个实体型之间的联系:一对一,一对多,多对多。
44.计算机世界中的概念:字段(Field),记录(Record),文件(File)。
45.集中式数据库:所谓集中式数据库系统,就是集中在一个中心场地的电子计算机上,以统一处理方式所支持的数据库。这类数据库无论是物理上还是逻辑上都是集中存储在一个容量足够大的外存储器上,其基本特点是:集中控制处理效率高,可靠性好;数据冗余少,数据独立性高;易于支持复杂的物理结构去获得对数据的有效访问。
46.分布式数据库:是一组结构化的数据集合,在逻辑上属于统一系统,而在物理上分布在计算机网络的不同结点上。
47.分布式数据库可以建立在以局域网连接的一组工作站点上,也可以建立在广域网的环境中。但分布式数据库系统并不是简单地把集中式数据库安装在不同的场地,而是具有自己的性质和特点。
48.分布式数据库的特点:自治与共享,冗余的控制,分布事务执行的复杂性,数据的独立性。
49.分布式数据库存取的事务是一种全局性事务,它是由许多在不同结点上执行对各局部数据库存取的局部子事务组成的。如果仍保持事务执行的原子性,则必须保证全局事务的原子性;当多个全局事务并发时,则必须保持全局可串行。也就是说,这种全局事务具有分布执行的特性。分布式数据库的状态一致性和可恢复性是面向全局的。所有子事务提交后全局事务才能提交;不仅要保证子事务的可串行化,而且应保证全局事务的可串行化。
50.关系模型:关系模型的数据结构是一个“二维表框架”组成的集合,每个二维表又可称为关系,所以关系模型是“关系框架”的集合。
51.关系模型中的概念:关系,元组,属性,关键字(关系键或主码),域,分量,关系模式。
52.关系模型的数据操纵与完整性约束:数据操纵主要包括查询、插入、删除和修改数据,这些操作必须满足关系的完整性约束条件,即满足实体完整性、参照完整性和用户定义的完整性。
53.关系模型的优点:关系模型与非关系模型不同,它具有较强的数学理论根据;数据结构简单、清晰,用户易懂易用,不仅用关系描述实体,而且用关系描述实体间的联系;关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库建立和开发的工作。
54.关系模型的缺点:查询效率不如非关系模型。
55.关系模型的完整性:实体完整性(主键约束),参照完整性(外键约束),用户定义完整性。
56.候选键:能惟一标识关系中元组的一个属性或属性集,称为候选键,也称为候选关键字或候选码。候选键具有惟一性与最小性。
57.主键:如果一个关系中有多个候选键,可以从中选择一个作为查询、插入、删除元组的操作变量,被选用的候选键称为主关系键,或简称为主键、主码、关系键、关键字等等。
58.主属性:包含在主码中的各个属性。
59.非码属性:不包含在任何候选码中的属性。
60.外部关系键:如果关系R2的一个或一组属性X不是R2的主码,而是另一关系R1的主码,则该属性或属性组X称为关系R2的外部关系键或外码,并称关系R2为参照关系,关系R1为被参照关系。
61.传统的集合运算:并,差,交,广义笛卡尔积。
62.专门的关系运算:选取,投影,连接,除法。
63.选取:选取运算是单目运算,是根据一定的条件在给定的关系R中选取若干个元组,组成一个新的关系。
64.投影:投影运算是单目运算,关系R上的投影是从R中选择出若干属性列,组成新的关系,即对关系在垂直方向进行的运算,从左到右按照指定的若干属性及顺序取出相应的列,删去重复元组。
65.连接:连接运算是二目运算,是从两个关系的笛卡尔积中选取满足连接条件的元组,组成新的关系。在连接运算中,最常见的一种连接是自然连接。所谓自然连接,就是在等值连接的情况下,当连接属性X与Y具有相同的属性组时,把在连接结果中重复的属性列去掉。自然连接是在广义笛卡尔积中选出同名属性上符合相等条件的元组,再进行投影,去掉重复的同名属性,组成新的关系。
66.关系数据库标准语言SQL:SQL是结构化查询语言(Structured Query Language)的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。
67.SQL语言的基本概念:基本表(table),视图(View)。
68.基本表:是独立存在的表,不是由其他的表导出的表。一个关系对应一个基本表,一个或多个基本表对应一个存储文件。
69.视图:是一个虚拟的表,是从一个或几个基本表导出的表。它本身不独立存在于数据库中,数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。当基本表中的数据发生变化时,从视图中查询出来的数据也随之改变。
70.SQL语言支持数据库的三级模式结构。外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。
71.SQL数据定义:create,drop,alter。
72.SQL数据查询:select。
73.SQL数据操纵:insert,update,delete。
74.SQL数据控制:grant,revoke。
75.创建基本表命令格式:create table 表名(<列定义>,<列定义>…<列定义>,表约束)。<列定义>的格式:<列名> <数据类型> [default] [{<列约束>}] 。
76.修改基本表命令格式:alter table 表名 add <列定义>|<完整性约束定义>。add方式用于增加新列和完整性约束,使用此方式增加的新列自动填充null值,所以不能为增加的新列指定not null约束。alter table 表名 alter column <列名> <数据类型> [null | not null]。alter方式用于修改某些列,但是会有如下限制:不能改变列名;不能将含有空值的列的定义修改为not null约束;若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型;只能修改null/not null约束,其他类型的约束在修改之前必须先将约束删除,然后再重新添加(使用add方式)修改过的约束定义。alter table 表名 drop constraint <约束名>。drop方式只用于删除完整性约束定义。
77.删除基本表命令格式:drop table <表名>。
78.null/not null约束:null值既不是零可0值也不是空白,更不是填入字符串“null”,而是表示“不知道”、“不确定”或“没有数据”的意思。
79.unique约束:用于指明基本表在某一列或多个列的组合上的取值必须惟一。定义了unique约束的那些列称为惟一键,系统自动为惟一键建立惟一索引,从而保证了惟一键的惟一性。惟一键允许为空,但最多只能有一个为NULL值。unique既可用于列约束,也可用于表约束。
80.primary key约束:用于定义基本表的主键,起惟一标识作用,其值不能为null,也不能重复,以此来保证实体的完整性。primary key与unique约束类似,通过建立惟一索引来保证基本表在主键列取值的惟一性,但他们之间存在着很大的区别:在一个基本表中只能定义一个primary key,但可以定义多个unique约束;对于指定为primary key的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于unique所约束的惟一键,则允许为空。primary key既可用于列约束也可用于表约束。不能为同一个列或一组列既定义unique约束,又定义primary key约束。
81.foreign key约束:指定某一个列或一组列作为外部键,其中,包含外部键的表称为从表(参照关系),包含外部键所引用的主键或惟一键的表称主表(被参照关系)。系统保证从表在外部键上的取值是主表中某一个主键值或惟一键值,或者取空值,以此保证两个表之间的连接,确保了实体的参照完整性。foreign key既可用于列约束,也可用于表约束。
82.check约束:用来检查字段值所允许的范围,以此来保证域的完整性。check既可用于列约束,也可用于表约束。
83.索引:是数据库随即检索的常用手段,它实际上就是记录的关键字与其相应地址的对应表。
84.索引的分类:聚集索引与非聚集索引,惟一索引,复合索引。
85.聚集索引与非聚集索引:按照索引记录存放的位置,索引可以分为聚集索引与非聚集索引。聚集索引按照索引的字段排列记录,并且按照排好的顺序将记录存储在表中。非聚集索引按照索引的字段排列记录,但是排列的结果并不会存储在表中,而是另外存储。在检索记录时,聚集索引会比非聚集索引速度快,因为数据在表中已经依索引顺序排好了,但当要新增或更新记录时,由于聚集索引需要将排序后的记录存储在表中,所以其速度会比非聚集索引稍慢。另外,一个表中只能有一个聚集索引,而非聚集索引可以有多个。
86.惟一索引:表示表中每一个索引值只对应惟一的数据记录,这与表的primary key的特性类似,因此惟一索引常用于primary key的字段上,以区别每一个记录。(当表中有被设置为unique的字段时,SQL Server会自动建立一个非聚集的惟一索引;而当表中有primary key的字段时,SQL Server会在primary key字段建立一个聚集索引。)
87.复合索引:是将两个字段或多个字段组合起来建立的索引,单独的字段允许有重复的值。
88.建立索引命令格式:create [unique] [clustered] index <索引名> on <表名>(<列名>[次序]…<列名>[次序]) 。其中unique表示建立惟一索引,clustered表示建立聚集索引,次序用来自指定索引值的排列顺序,可为ASC(升序)或DESC(降序),缺省时默认为ASC。例如:create unique index sci on sc(sno,cno),该语句为sc表建立一个名为sci的惟一索引,此索引为sno和cno两列的复合索引,即对sc表中的行先按sno的递增顺序索引,对于相同的sno,又按cno的递增顺序索引。由于unique的限制,不存在sno相同的情况下cno相同的情况,所以该索引在(sno,cno)组合列的排序上具有惟一性,不存在重复值。
89.索引注意事项:改变表中的数据时,如增加或删除记录,索引将自动更新;索引建立后,在查询使用该列时,系统将自动使用索引进行查询;索引数目无限制,但索引越多,更新数据的速度越慢,所以对于仅用于查询的表可多建索引,对于数据更新频繁的表则应少建索引。
90.删除索引命令格式:drop index 表名.索引名。例如:drop index sc.sci。
91.SQL查询命令格式:
select [all|distinct][top n[percent][with ties]] <列名> [as 别名1],…,<列名n>[as 别名n]
[into 新表名]
from <表名1或视图名1>[[as]表1别名],…,<表名n或视图名n>[[as]表n别名]
[where <检索条件> ]
[group by <列名>[having<条件表达式>]]
[order by <列名>[asc|desc]] ;
或者
select [all|distinct][top n[percent][with ties]] <列名> [as 别名1],…,<列名n>[as 别名n]
[into 新表名]
from 表名1 [[as] 表1别名] [inner|right|full|left] [outer] join 表名2 [[as]表2别名]
on 连接条件 [where <检索条件> ] [group by <列名>[having<条件表达式>]]
[order by <列名>[asc|desc]] ;
select 查询的结果仍是一个表。select语句的执行过程:根据where子句的检索条件,从from子句指定的基本表或视图中选取满足条件的元组,再按照select子句中指定的列,投影得到结果表。如果有group子句,则将查询结果按照<列名>相同的值进行分组。如果group子句后有having短语,则只输出满足having条件的元组。如果有order子句,查询结果还要按照order子句中<列名>的值进行排序。where子句相当于关系代数中的选取操作,select子句相当于投影操作。但SQL查询不必规定投影、选取、连接的执行顺序,比关系代数简单,功能更多。
92.where子句常用的比较运算符:比较大小(=,>,<,>=,<=,!=,<>),多重条件(not,and,or,优先级如该顺序),确定范围(between and),确定集合(in),字符匹配(like),控制(is null)。
93.模糊查询like通配符:%(代表0个或多个字符),_(下划线,代表一个字符),[](代表在某一范围的字符),[^](代表不在某一范围的字符)。
94.SQL常见库函数:avg(),sum(),max(),min(),count()。注意:avg和sum只能对数值型字段进行计算;count对空值不计算,但对0计算;count(*)用来统计元组的个数,不消除重复行,不允许使用distinct关键字。
95.group by分组查询:group by子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。若在分组后还要按照一定的条件进行筛选,则需使用having子句。
96.where子句与having子句的根本区别在与作用对象不同。where子句作用于基本表或视图,从中选择满足条件的元组;having子句作用于组,选择满足条件的组,必须用于group by子句之后。
97.数据表连接及连接查询:如果一个查询需要对多个表进行操作,就称为连接查询。连接查询的结果集或结果表,称为表之间的连接。连接查询实际上是通过各个表之间共同列的关联性来查询数据的,数据表之间的联系是通过表的字段值来体现的,这种字段成为连接字段。
98.表的两种连接方式:表之间满足一定条件的行进行连接时,from子句指明进行连接的表名,where子句指明连接的列名及其连接条件;利用关键字join 进行连接,分为以下几种:inner join,left join,right join,full join,cross join。当join关键词放于from子句中时,应有关键词on与之对应,以表明连接条件。
99.inner join(内连接):显示符合条件的记录,此为默认值。
100.left(outer) join(左(外)连接):用于显示符合条件的数据行以及左边表中不符合条件的数据行,此时右边数据行会以null来显示。
101.right(outer)join(右(外)连接):用于显示符合条件的数据行以及右边表中不符合条件的数据行,此时左边数据行会以null来显示。
102.full(outer)join(全(外)连接):显示符合条件的数据行以及左边表和右边表中不符合条件的数据行,此时缺乏数据的数据行会以null来显示。
103.cross join(交叉连接):将一个表的每一个记录和另一表的每个记录匹配成新的数据行(广义笛卡尔积)。
104.在外部连接中,参与连接的表有主从之分,以主表的每行数据去匹配从表的数据列。符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上null值后再返回到结果集中(对于bit类型的列,由于bit数据类型不允许有null值,因此会被填上0值再返回到结果集中)。外部连接分为左外部连接和右外部连接两种,以主表所在的方向区分外部连接,主表在左边,则称为作外部连接;主表在右边,则称为右外部连接。
105.自身连接:当一个表与其自己进行连接操作时,称为表的自身连接。
106.子查询:在where子句中包含一个形如select-from-where的查询块,此查询块称为子查询或嵌套查询,包含子查询的语句称为父查询或外部查询。嵌套查询可以将一系列简单查询构造成复杂查询,增强查询能力。子查询的嵌套查询层次最多可达到255层,以层层嵌套的方式构造查询充分体现了SQL语言“结构化”的特点。嵌套查询在执行时有里向外处理。
107.返回一个值的子查询:当子查询的返回值只有一个时,可以使用比较运算符(=,>,<,>=,<=,!=)将父查询和子查询连接起来。
108.返回一组值的子查询:如果子查询的返回值不止一个,而是一个集合时,则不能直接使用比较运算符,可以在比较运算符和子查询之间插入any或all。可以使用in代替“=any”,not in 代替“<>all”。
109.普通子查询和相关子查询:子查询包含普通子查询和相关子查询,二者的执行方式不同。普通子查询的执行顺序是:首先执行子查询,然后把子查询的结果作为父查询的查询条件的值。普通子查询只执行一次,而父查询所涉及的所有记录行都与其查询结果进行比较以确定查询结果集。而相关子查询的执行顺序是:首先选取父查询表中的第一行记录,内部的子查询利用此行中相关的属性值进行查询,然后父查询根据子查询返回的结果判读此行是否满足查询条件。如果满足条件,则把该行放入父查询的查询结果集合中。重复执行这一过程,直到处理完父查询表中的每一行数据。由此可以看出,相关子查询的执行次数是由父查询表的行数决定的。
110.exists:exists是表示存在的量词,带有exists的子查询不返回任何实际数据,它只得到逻辑值“真”或“假”。当子查询的查询结果集合为非空时,外层的where子句返回真值,否则返回假值(例如:select * from table1 where exists (select arr1 from table2))。not exists与此相反。
111.合并查询:使用union操作符将来自不同查询的数据组合起来,形成一个具有综合信息的查询结果。union操作会自动将重复的数据行剔除。但需要注意的是,参加合并查询的各子查询使用的表结构应该相同,即各子查询中的数据数目和对应的数据类型都必须相同。
112.使用select…into语句可以将查询结果存储到一个新建的数据库表或临时表中。临时表使用“#表名”,例如,select * from table1 into #table2。临时表只存储在内存中,并不存储在数据库中,所以其存在的时间非常短。
113.SQL语言提供的数据更新DML主要包括插入数据、修改数据、删除数据三种。
114.插入数据语句命令格式:insert into 表名(列名1,…,列名n) values(值1,…值n)。注意,必须使用逗号将各个数据分开,字符型数据要用单引号括起来。如果into子句中没有指定列名,则新插入的记录必须在每个属性列上均有值,且values子句中值的排列顺序要和表中各属性列的排列顺序一致。
115.修改数据命令格式:update 表名 set 列名1=值1,…,列名n=值n where 条件表达式。where子句省略时,修改表中所有的记录。
116.删除记录命令格式:delete from 表名 where 条件表达式。删除一个表中的所有记录,并不意味着删除表,表的定义仍存在于数据字典中。
117.视图:视图是虚表,其数据不进行存储,其记录来自基本表,只在数据库中存储其定义。在概念上等同于基本表,可以在视图上再定义视图,可以对视图进行查询、删除和更新等操作。
118.定义视图命令格式:create view 视图名 [视图列表] as 子查询。其中视图列表是可选项,省略时,视图的列名由子查询的结果决定。但有两种情况,视图列名不可省略:视图由多个表连接得到,在不同的表中存在同名列时,则需要指定列名;当视图的列名为表达式或函数计算的结果,而不是单纯的属性名时,则需要指明列名。在子查询中,不允许使用order by子句和distinct短语,如果需要排序,则可在视图定义后,对视图查询时再进行排序。
119.删除视图命令格式:drop view 视图名。视图删除后,只会删除在数据字典中的定义,而与视图有关的基本表中的数据不会受到影响,由此视图导出的其他视图的定义不会删除,但已无任何意义,所以在删除视图,理应将其导出的其他视图一并删除。
120.更新视图:由于视图是一张虚表,所以对视图的更新,最终转换成对基本表的更新。其更新操作包括插入、修改和删除数据,其语法格式如同对基本表的更新操作一样。
121.使用视图的优点:利于数据保密,简化查询操作,保证数据的逻辑独立性。
122.SQL语言提供数据控制语句(Data Control Language,DCL)对数据库进行统一的控制管理。在SQL系统中,有两个安全机制,一个是视图机制,另一个是权限机制(主要)。在数据库中,权限可分为系统权限和对象权限。
123.系统权限:是指数据库用户能够对数据库系统进行某种特定的操作的权力。它可由数据库管理员授予其他用户。如创建一个基本表。
124.对象权限:是指数据库用户在指定的数据库对象上进行某种特定的操作的权力。对象权限由创建基本表、视图等数据库对象的用户授予其他用户。如查询、插入、修改、删除等操作。
125.角色:是多种权限的集合,可以把角色授予用户或其他角色。当要为某一用户同时授予或收回多项权限时,则可以把这些权限定义为一个角色,对此角色进行操作。
126.系统权限与角色的授予:grant 系统权限|角色 to 用户名|角色|public [with admin option]。public代表数据库中的全部用户。with admin option是可选项,指定后则允许被授权的用户将指定的系统权限或角色再授予其他用户或角色。
127.系统权限与角色的收回:revoke 系统权限|角色 from 用户名|角色|public。
128.数据库管理员拥有系统权限,而作为数据库的普通用户,只对自己创建的基本表、视图等数据库对象拥有对象权限。如果要共享其他的数据库对象,则必须授予普通用户一定的对象权限。
129.对象权限与角色的授予:grant all|对象权限[(列名1,…,列名2)] on 对象名 to 用户名|角色|public [with grant option]。all代表所有的对象权限。列名用于指定要授权的数据库对象的一列或多列。如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授予insert、update权限时才需要指定列名。on子句用于指定要授予对象权限的数据库对象名,可以是基本表名、视图名等。with grant option是可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。
130.对象权限与角色的收回:revoke 对象权限|角色 from 用户名|角色|public。
131.关系数据库的规范化理论主要包括三个方面的内容:函数依赖、范式和模式设计。其中函数依赖起着核心的作用,是模式分解和模式设计的基础,范式是模式分解的标准。
132.关系模式中的各属性之间相互依赖、相互制约的联系称为数据依赖。数据依赖一般分为函数依赖、多值依赖和连接依赖。其中函数依赖是最重要的数据依赖,函数依赖是关系模式中属性之间的一种逻辑依赖关系。
133.函数依赖:设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有惟一的具体值与之对应,则称X决定函数Y,或Y函数依赖于X,记作X→Y。称X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作X↛Y。当X→Y且Y→X时,记作X↔Y。
134.函数依赖的基本性质:投影性,扩张性,合并性。
135.规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、删除时发生的异常现象。这就要求关系数据库设计出来的关系模式要满足一定的条件。我们把关系数据库的规范化过程中为不同程度的规范化要求设立的不同标准称为范式(Normal Form)。由于规范化的程度不同,就产生了不同的范式。满足最基本规范化要求的关系模式叫第一范式,在第一范式中进一步满足一定要求的范式为第二范式,以此类推,就产生了第三范式等概念。每种范式都规定了一些限制约束条件。
136.第一范式:最基本的规范形式,即关系中每个属性都是不可再分的简单项。如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R∈1NF。
137.第二范式:如果关系模式R∈1NF,且每个非主属性都完全函数依赖与R的每个关系键,则称R属于第二范式,简称2NF,记作R∈2NF。
138.2NF规范化:是指把1NF关系模式通过投影分解,转换成2NF关系模式的集合。分解时遵循的基本原则就是“一事一地”,让一个关系只描述一个实体或者实体间的联系,如果多于一个实体或联系,则进行投影分解。
139.第三范式:如果关系模式R∈2NF,且每个非主属性都不传递依赖于R的每个关系键,则称R属于第三范式,简称3NF,记作R∈3NF。如果R∈3NF,则R也是2NF,反之不一定。
140.3NF规范化:是指把2NF的关系模式通过投影分解转换成3NF关系模式的集合。3NF规范化时遵循的原则与2NF相同。
141.BC范式:如果关系模式R∈1NF,且所有的函数依赖X→Y(Y∉X),决定因素X都包含了R的一个候选键,则称R属于BC范式,记作R∈BCNF。
142.BCNF的性质:满足BCNF的关系将消除任何属性(主属性或非主属性)对键的部分函数依赖和传递函数依赖,也就是说,如果R∈BCNF,则R也是3NF;如果R∈3NF,则R不一定是BCNF。
143.BCNF规范化:是指把3NF的关系模式通过投影分解转换成BCNF关系模式的集合。
144.函数依赖表示的是关系模式中属性间的一对一或一对多的联系,但它并不能表示属性间的多对多的关系,因而某些关系模式虽然已经规范到BCNF,仍然存在一些弊端。
145.多值依赖:设有关系模式R(U),U是属性全集,X、Y、Z都是属性集U的子集,且Z=U-X-Y,如果对于R的任一关系,对于X的一个确定值,存在Y的一组值与之对应,且Y的这组值仅仅决定于X的值而与Z值无关,此时称Y多值依赖于X,或X多值决定Y,记作X→→Y。在多值依赖中,若X→→Y且Z=U-X-Y≠∅,则称X→→Y是非平凡的多值依赖,否则称为平凡的多值依赖。
146.第四范式:设有一关系模式R(U),U是其属性全集,X、Y是U的子集,D是R上的数据依赖。如果对于任一多值依赖X→→Y,此多值依赖是平凡的,或者X包含了R的一个候选关键字,则称R是第四范式的关系模式,记作R∈4NF。
147.4NF的分解:把一个关系模式分解为4NF的方法与分解为BCNF的方法类似,就是当把一个关系模式利用投影的方法消去非平凡且函数依赖的多值性,并具有无损连接性。
148.关系模式规范化的步骤:1NF→2NF→3NF→BCNF→4NF。在进行关系模式的设计时,通常分解到3NF就足够了。
149.关系模式规范化的要求:无损连接性,函数依赖保持性。判断对关系模式的一个分解是否与原关系模式等价可以有三种不同的标准:分解要具有无损连接性;分解要具有函数依赖保持性;分解既要具有无损连接性,又要具有函数依赖保持性。
150.DBMS对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性控制、数据恢复。
151.数据库的安全性:是指保护数据库以防止非法使用所造成的数据泄漏、更改或损坏。安全性问题来自许多方面,例如:法律、社会和伦理方面的问题;物理控制方面的问题;政策方面的问题;运行方面的问题;硬件控制方面的问题;操作系统安全性方面的问题;数据库系统本身的安全性方面的问题等。
152.安全性控制:是指要尽可能地杜绝所有可能的数据库非法访问。安全性控制的一般方法有:用户标识和鉴定(最外层的安全保护措施);用户存权限控制;定义视图;数据加密;审计。
153.完整性控制:是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。数据库中的数据是否具备完整性关系到数据能否真实地反映现实世界。
154.完整性规则的组成:触发条件;约束条件;违约响应。完整性规则从执行时间上可以分为立即执行约束和延迟执行约束。一条完整性规则可以用一个五元组(D,O,A,C,P)来形式化地表示,即Data代表约束作用的数据对象,Operation代表触发完整性检查的数据库操作,Assertion代表数据对象必须满足的语义约束,Condition代表选择Assertion作用的数据对象值的谓词,Procedure代表违反完整性规则时触发执行的操作过程。
155.关系模型的完整性包括实体完整性、参照完整性和用户定义完整性。对于违法实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。而对于违法参照完整性的操作,并不都是拒绝执行,一般在接受这个操作的同时,执行一些附加操作,以保证数据库的状态仍然是正确的。
156.完整性约束条件的分类:从使用的对象分为值的约束和结构的约束,从约束对象的状态分为静态约束和动态约束。
157.值的约束:即对数据类型、数据格式、取值范围和空值等进行规定。
158.结构的约束:函数依赖约束,实体完整性约束,参照完整性约束,统计约束。
159.静态约束:是指对数据库每一个确定状态所应满足的约束条件,是反映数据库状态合理性的约束,这是最重要的一类完整性约束。值得约束和结构的约束均属于静态约束。
160.动态约束:是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件,动态约束反映的是数据库状态变迁的约束。例如年龄只能增长。
161.并发控制以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。
162.事务:DBMS的并发控制是以事务为基本单位进行的。事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。
163.事务的开始和结束可以由用户显示地控制。如果用户没有显示地定义事务,则由DBMS按照缺省规定自动划分事务。在SQL语言中,定义事务的语句有三条:begin transaction、commit、rollback。
164.事务的特征:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。
165.数据库的并发操作导致的数据库不一致性主要有三种:丢失更新,污读,不可重读。产生这三类数据库不一致性的主要原因就是并发操作破坏了事务的隔离性。并发控制就是要求DBMS提供并发控制功能以正确的方式处理并发事务,避免并发事务之间的相互干扰造成数据的不一致性,保证数据库的完整性。
166.丢失更新:当两个事务T1和T2读入同一数据,并发执行修改操作时,T2把T1或T1把T2的修改结果覆盖掉,造成了数据的丢失更新问题,导致数据的不一致性。(采用一级封锁协议解决。)
167.污读:事务T1更新了数据R,事务T2读取了更新后的R,事务T1由于某种原因被撤销,修改无效,数据R恢复原值。事务T2得到的数据与数据库的内容不一致,这种情况称为“污读”。对于这些未提交的随后又被撤销更新的数据称为“脏数据”。(采用二级封锁协议解决。)
168.不可重读:事务T1读取了数据R,事务T2读取并更新了数据R,当事务T1再读取数据R以进行数据核对时,得到的两次读取值不一致,这种情况称为“不可重读”。
169.实现并发控制的方法主要有两种:封锁(Lock)技术,时标(Timestamping)技术。
170.封锁:所谓封锁,就是当一个事务在对某个数据对象(可以是数据项、记录、数据集以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。封锁是目前DBMS普遍采用的并发控制方法,基本的封锁类型两种:排它型封锁和共享锁。
171.排它型封锁:又称写封锁,简称为X封锁,它采用的原理是禁止并发操作。当事务T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。这就保证了其他事务在T释放R上的封锁之前,不能再对R进行操作。
172.共享封锁:又称读封锁,简称为S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。
173.封锁协议:封锁可以保证合理地进行并发控制,保证数据的一致性。实际上,锁是一个控制块,其中包括被加锁记录的标识符及持有锁的事务的标识符等。在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。对封锁方式规定不同的规则,就形成了各种不同的封锁协议:一级封锁协议,二级封锁协议,三级封锁协议。
174.一级封锁协议:事务T在修改数据对象之前必须对其加X锁,直到事务结束。具体说,就是任何企图更新记录R的事务必须先执行“XLOCKR”操作,以获得对该记录进行寻址的能力并对它取得X封锁。如果未获准“X封锁”,那么这个事务进入等待状态,一直到获准“X封锁”,该事务才能继续下去。一级封锁协议只有修改数据时才进行加锁,如果只是读取数据则并不加锁,所以它仅能解决“丢失更新”的问题,不能防止“污读”和“重读”数据。(一级封锁协议功能类似与volatile关键字仅能保证单个变量的写操作具有原子性这一特性。)
175.二级封锁协议:在一级封锁协议的基础上,另外加上事务T在读取数据R之前,必须先对其加S锁,读完后释放锁。所以二级封锁协议不但可以解决更新时所发生的数据丢失问题,还可以进一步防止“污读”。但是二级封锁协议在读取之后,立即释放S锁,所以它仍然不能防止“重读”数据。
176.三级封锁协议:在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才事务。所以三级封锁协议除了可以防止“丢失更新”问题和“污读”数据外,还可以进一步防止“不可重读”数据,彻底解决了并发操作所带来的三个不一致性问题。
177.封锁粒度:指封锁的单位。根据对数据的不同处理,封锁的对象可以是这样的一些逻辑单元:字段、记录、表、数据库等,封锁的数据对象的大小叫封锁粒度。封锁粒度与系统的并发度和并发控制的开销密切相关。封锁粒度越小,系统中能够被封锁的对象就越多,并发度越高,但封锁机构复杂,系统开销也就大。相反,封锁粒度越大,系统中能够被封锁的对象就约少,并发度越小,封锁机构越简单,相应系统开销也就越小。因此,在实际应用中,选择封锁粒度时,应同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,以求得最优的效果。
178.封锁技术可有效解决并行操作的一致性问题,但也可产生新的问题,即活锁和死锁。
179.活锁:当某个事务请求对某一数据进行排它型封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态,这种状态称为活锁。避免活锁的简单方法是采用先来先服务的策略,按照请求封锁的次序对事务排队,一旦数据对象上的锁释放,就使申请队列中的第一个事务获得锁。
180.死锁:在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着某个数据,而这个数据被它们中的某个事务所封锁,这种状态为死锁。
181.死锁产生的条件:互斥条件(资源的互斥性访问),不可抢占条件,部分分配条件(占有且等待),循环等待条件。
182.死锁的预防:同操作系统预防死锁的方法类似,在数据库环境下,预防死锁常用的方法有:一次加锁法,顺序加锁法。
183.一次加锁法:每个事务必须将所有要使用的数据对象全部依次加锁,并要求加锁成功,只要一个加锁不成功,表示本次加锁失败,则应该立即释放所有加锁成功的数据对象,然后重新开始加锁。(类似于银行家算法。)
184.一次加锁法虽然可以有效地预防死锁的发生,但也存在一些问题。首先,对某一事务要使用的全部数据一次性加锁,扩大了锁的范围,从而降低了系统的并发度。其次,数据库中的数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象,这样只能在一开始就扩大封锁范围,将可能要封锁的数据全部加锁,这就进一步降低了系统的并发度。
185.顺序加锁法:是预先对所有可能加锁的数据对象规定一个加锁顺序,每个事务都需要按此顺序加锁,在释放时,按逆序进行。
186.顺序加锁法同一次加锁法一样,也存在一些问题。因为事务的封锁请求可以随着事务的执行而动态地决定,所以很难事先确定封锁对象,从而更难确定封锁顺序。即使确定了封锁顺序,但随着数据操作的不断变化,维护这些数据的封锁顺序需要很大的系统开销。
187.在数据库系统中,由于可加锁的目标集合不但很大,而且是动态变化的;可加锁的目标常常不是按名寻址,而是按内容寻址,预防死锁常要付出很高的代价,因而一次加锁法和顺序加锁法这两种在操作系统中广泛使用的预防死锁的方法并不太适合数据库的特点。一般情况下,在数据库系统中,可以允许发生死锁,在死锁发生后可以自动诊断并解除死锁。
188.死锁的诊断与解除:数据库中诊断死锁的方法与操作系统类似。可以利用事务信赖图的形式来测试系统中是否存在死锁。如果在事务依赖图中沿着箭头方向存在一个循环,那么死锁的条件就形成了,系统就会出现死锁。如果已经发现死锁,DBA从依赖相同资源的事务中抽出某个事务作为牺牲品,将它撤销,解除它的所有封锁,释放此事务占用的所有数据资源,分配给其他事务,使其他事务得以继续运行下去,这样就有可能消除死锁。在解除死锁的过程中,抽取牺牲事务的标准是,根据系统状态及其应用的实际情况来确定,通常采用的方法这一是选择一个处理死锁代价最小的事务,将其撤销。不重要的用户,取消其操作,释放封锁的数据,恢复对数据库所作的改变。
189.数据库的恢复:系统具有检测故障并把数据从错误状态中恢复到某一正确状态的功能,这就是数据库的恢复。数据库恢复的基本原理十分简单,就是利用数据的冗余。
190.数据库中任何被破坏或不正确的数据都可以利用存储在系统其他地方的冗余数据来修复。因此恢复系统应该提供两种类型的功能:一种是生成数据冗余,即对可能发生的故障作某些准备;另一种是冗余重建,即利用这些冗余数据恢复数据库。生成冗余数据最常用的技术是登记日志文件和数据转储,在实际应用中,这两种方法常常结合起来一起是使用。
191.登记日志文件(Logging):日志文件是用来记录事务对数据库的更新操作的文件。对数据库的每次修改,都将被修改项目的旧值和新值写在一个叫做运行日志的文件中,目的是为数据库的恢复保留详细的数据。
192.为保证数据库是可恢复的,登记日志文件必须遵循两条原则:至少要等到相应运行记录的撤销部分已经写入日志文件中以后,才允许该事务向物理数据库中写入记录;直到事务的所有运行记录的撤销和重做两部分都已写入日志文件中以后,才允许事务完成提交处理。这两条原则称为日志文件的先写原则。
193.数据转储(Data Dump):是指定期地将整个数据库复制到多个存储设备上保存起来的过程,它是数据库恢复中采用的基本手段。按照转储方式,转储可以分为海量转储和增量转储。按照转储状态,转储又可分为静态转储和动态转储。
194.数据库的故障和恢复:事务故障及其恢复,系统故障及其恢复,介质故障及其恢复。
195.数据库设计的内容:数据库的结构设计,数据库的行为设计。
196.数据库设计的特点:从数据模型开始设计,以数据模型为核心进行展开,将数据库设计和应用系统设计相结合,建立一个完整、独立、共享、冗余小和安全有效的数据库系统。
197.数据库设计方法:直观设计法、规范设计法、计算机辅助设计法、自动设计法。
198.新奥尔良法:目前公认的比较完整和权威的一种规范设计法。将数据库设计分成需求分析、概念设计、逻辑设计、物理设计几个阶段。目前常用的规范设计方法大多起源于新奥尔良法,并在设计的每一阶段采用一些辅助方法来具体实现,主要有以下几种:基于E-R模型的数据设计方法,基于3NF的数据库设计方法,基于视图的数据库设计方法。
199.数据库设计的步骤依次为:系统需求分析阶段,概念结构设计阶段,逻辑结构设计阶段,物理设计阶段,数据库实施阶段,数据库运行与维护阶段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值