数据库知识总结

1、 数据、数据库、数据库系统、数据库管理系统的概念 
数据(DATA):数据是描述事物的符号记录,数据与其语义是不可分的。 
数据库(DB):数据库就是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存、具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享。 
数据库管理系统(DBMS):数据库管理系统是位于用户与操作系统之间的一层数据管理软件。数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制。数据库管理系统使用户能方便地定义数据和操纵数据,并能够保证数据的安全性、完整性、多用户对数据的并发使用及发生故障后的系统恢复。 
数据库系统(DBS):数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。 
2、 数据库技术的产生与发展阶段 
数据管理经历了人工管理、文件系统和数据库系统三个发展阶段 
人工管理阶段特点 
数据不保存 
数据需要由应用程序自已管理,没有相应的软件系统负责数据的管理工作。 
数据不共享、冗余度极大 
数据不具有独立性,数据的逻辑结构或物理结构发生变化后,必须对应用程序做相应的修改,加重了程度员的负担。 
文件系统阶段特点: 
数据可以长期保存 
由专门的软件即文件系统进行数据管理 
数据共享性差,冗余度大 
数据独立性差,数据记录内有结构,整体不结构 
数据库系统阶段特点 
数据结构化 
数据的共享性好,冗余度低 
数据独立性高 
数据由DBMS统一管理和控制 
数据结构化是数据库与文件系统的根本区别 
3、 实体-联系方法(E-R图) 
实体型:用矩形表示,矩形框内写明实体名 
属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。 
联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边标上联系的类型(1:1,1:n或m:n)。 
4、 最常用的数据模型:层次模型、网状模型、关系模型 
5、 关系数据模型的优缺点 
数据模型的优点 
关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。 
关系模型的概念单一 
关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。 
数据模型的缺点 
由于存取路径对用户透明,查询效率往往不如非关系数据模型。因此,为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的负担。 
6、 数据库系统的三级模式结构 
模式:模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图 
外模式:外模式也称子模式或用户模式,它是数据库用户看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。 
内模式:内模式也称存储模式,它是数据物理结构和存储结构的描述,是数据在数据内部的表示方式。 
7、 关系数据库系统是支持关系模型的数据库 
8、 数据模型由数据结构、数据操作、完整性约束组成。 
9、 完整性约束  
实体完整性:若属性A是基本关系R的主属性,则属性A不能取空取。 
参照完整性:若属性(属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值);或都等于S中某个元组的主码值。 
用户义的完整性:用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。 
10、 关系、域、笛卡尔积 
关系:一张二维表 
域:是一组具有相同数据类型的值的集合 
笛卡尔积:是一种非常费时的操作 

给定一组域D1,D2,…,Dn,这些域中可以有相同的。D1,D2,…,Dn的笛卡尔积为:

D1×D2×…×Dn={(d1,d2,…,dn)|d∈Di,i=1,2,…,n} 
所有域的所有取值的一个组合 
不能重复 
11、 主码、码、外码、候选码、全码、非主属性 
主码:若一个关系有多个候选码,则选定其中一个为主码(Primary key) 
码:唯一标识实体的属性的集称为码 
外码:关系模式R中属性或属性组X 并非R的码,但X是另一个关系模式的码,则称X是R的外码 
候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码 
全码:在最极端的情况下,关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key) 
非主属性:主码的诸属性称为主属性(Prime attribute)。不包含在任何侯选码中的属性称为非码属性(Non-key attribute) 
12、 基本关系的6条性质 
列是同质的,即每一列中的分量是同一类型的数据,来自同一个域 
不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名 
列的顺序无所谓,即列的次序可以任意交换 
任意两个元组不能完全相同 
行的顺序无所谓,即行的次序可以任意交换 
分量必须取原子值,即每个分量都必须是不可分的数据项 
13、 关系模式 
关系的描述称为关系模式,可用R(U,D,DOM,F)表示,R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映象集合,F为属性间数据的依赖关系集合。 
14、 参照完整性<外码、参照、被参照> 
设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与 基本关系S的主码KS相对应,则称F是基本关系R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。 
15、 关系运算:选择、投影、连接、除的定义 
选择:选择运算实际是从关系R中选取使逻辑表达式F为真的元组,这是从行的角度进行的运算。 
投影:关系R上的投影从R中选择出若干属性列组成新的关系。投影操作是从列的角度进行的运算。 
连接:从两个关系的笛卡尔积中选取属性间满足一定条件的元组。 
除:给定关系R(X,Y)和S(Y,Z),R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组,在X属性列上的投影,元组在X上分量值X的象素集YX包含S在Y上投影的集合。除操作是同时从行和列进行运算。 
16、 集合运算 
并:R和S 
具有相同的目n(即两个关系都有n个属性) 
相应的属性取自同一个域 
R∪S  
仍为n目关系,由属于R或属于S的元组组成 
R∪S = { t|t∈R∨t∈S } 
差:R和S 
具有相同的目n 
相应的属性取自同一个域 
R - S  
仍为n目关系,由属于R而不属于S的所有元组组成 
 R -S = { t|t∈R∧『t∈S} 
交:R和S 
具有相同的目n 
相应的属性取自同一个域 
R∩S 
仍为n目关系,由既属于R又属于S的元组组成 
R∩S = { t|t ∈ R∧t∈S } 
R∩S = R –(R-S) 
广义笛卡尔积: 

n目关系,k1个元组 

m目关系,k2个元组 
R×S  
列:(n+m)列的元组的集合 
元组的前n列是关系R的一个元组 
后m列是关系S的一个元组 
行:k1×k2个元组 
R×S = {tr ts |t r ∈R ∧ ts∈S } 
17、 SQL的特点 
综合统一:将数据定义语言、数据操纵语言,数据控制语言的功能集于一体。 
高度非过程化:存取路径的选择以及SQL语句的操作过程由系统自动完成。 
面向集合的操作方式 
以同一种语法结构提供两种方式:是自含式语言,又是嵌入式语言 
语言简洁,易学易用 
18、 定义、修改、删除基本表 
1) 定义: 
CREATE TABLE <表名> 
      (<列名> <数据类型>[ <列级完整性约束条件> ] 
      [,<列名> <数据类型>[ <列级完整性约束条件>] ] … 
      [,<表级完整性约束条件> ] ); 

<表名>:所要定义的基本表的名字 
<列名>:组成该表的各个属性(列) 
<列级完整性约束条件>:涉及相应属性列的完整性约束条件 
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件  

例:建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 

CREATE TABLE Student 
 (Sno CHAR(5) NOT NULL UNIQUE,  
 Sname CHAR(20) UNIQUE,  
 Ssex CHAR(1) , 
 Sage INT, 
 Sdept CHAR(15));  
主码约束: PRIMARY KEY 
唯一性约束:UNIQUE 
非空值约束:NOT NULL 
PRIMARY KEY与 UNIQUE的区别? 
PRIMARY KEY:主键,每个表只能有一个,他是标识记录的唯一标志;整个表中只能定义一个;UNIQUE:是唯一索引的选项,每个表可以有多个唯一索引 
2)删除 
删除Student表 
DROP TABLE Student  
3)修改 
ALTER TABLE <表名> 
[ ADD <新列名> <数据类型> [ 完整性约束 ] ] 
[ DROP <完整性约束名> ] 
[ MODIFY <列名> <数据类型> ]; 

<表名>:要修改的基本表 
ADD子句:增加新列和新的完整性约束条件 
DROP子句:删除指定的完整性约束条件 
MODIFY子句:用于修改列名和数据类型 

例:向Student表增加“入学时间”列,其数据类型为日期型。 
ALTER TABLE Student ADD Scome DATE; 
例:直接删除属性列:(新) 
ALTER TABLE Student Drop Scome; 
例: 将年龄的数据类型改为半字长整数。 
ALTER TABLE Student MODIFY Sage SMALLINT 
注:修改原有的列定义有可能会破坏已有数据 
不论基本表中原来是否已有数据,新增加的列一律为空值。  
例:删除学生姓名必须取唯一值的约束。 
ALTER TABLE Student DROP UNIQUE(Sname);  
4)索引的建立 
语句格式 
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
用<表名>指定要建索引的基本表名字 
索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 
用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC 
UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 
CLUSTER表示要建立的索引是聚簇索引,聚簇索引是指索引项的顺序与表中录的物理顺序一致的索引组织。 

[例] 为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。 
CREATE UNIQUE INDEX Stusno ON Student(Sno); 
CREATE UNIQUE INDEX Coucno ON Course(Cno); 
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);  
5)删除索引  
DROP INDEX <索引名>; 
 删除索引时,系统会从数据字典中删去有关该索引的描述。  
[例] 删除Student表的Stusname索引。 
DROP INDEX Stusname; 
19、 查询(见期中题 P94 例43) 
1)语句格式 
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] … 
FROM <表名或视图名>[, <表名或视图名> ] … 
[ WHERE <条件表达式> ] 
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ] 
[ ORDER BY <列名2> [ ASC|DESC ] ]; 

SELECT子句:指定要显示的属性列 
FROM子句:指定查询对象(基本表或视图) 
WHERE子句:指定查询条件 
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。 
HAVING短语:筛选出只有满足指定条件的组 
ORDER BY子句:对查询结果表按指定列值的升序或降序排序  
2)单表查询 
[例1] 查询全体学生的学号与姓名。 
SELECT Sno,Sname 
FROM Student;  
[例2] 查询全体学生的姓名、学号、所在系。 
SELECT Sname,Sno,Sdept 
FROM Student; 
[例3] 查询全体学生的详细记录。 
SELECT Sno,Sname,Ssex,Sage,Sdept  
FROM Student;  
 或 
SELECT * 
FROM Student 
[例4] 查全体学生的姓名及其出生年份。 
SELECT Sname,2000-Sage 
FROM Student;  
[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。 
SELECT Sname,'Year of Birth: ',2000-Sage,ISLOWER(Sdept) 
FROM Student 
消除取值重复的行,在SELECT子句中使用DISTINCT短语 

[例6] 查询选修了课程的学生学号。 
SELECT DISTINCT Sno 
 FROM SC; 
注意 DISTINCT短语的作用范围是所有目标列 
[例7] 查询所有年龄在20岁以下的学生姓名及其年龄。 
SELECT Sname,Sage  
FROM Student  
WHERE Sage < 20; 或  

SELECT Sname,Sage  
FROM Student  
WHERE NOT Sage >= 20;  
[例8] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 
 SELECT Sname,Sdept,Sage 
FROM Student 
WHERE Sage BETWEEN 20 AND 23;  
[例9] 查询年龄不在20~23岁之间的学生姓名、系别和年龄。 
SELECT Sname,Sdept,Sage 
FROM Student 
WHERE Sage NOT BETWEEN 20 AND 23;  
[例10]查询信息系(IS)、数学系(MA)和计 
 算机科学系(CS)学生的姓名和性别。 
SELECT Sname,Ssex 
FROM Student 
WHERE Sdept IN ( 'IS','MA','CS' ); 
[例11]查询既不是信息系、数学系,也不是计算  
 机科学系的学生的姓名和性别。 
SELECT Sname,Ssex 
FROM Student 
 WHERE Sdept NOT IN ( 'IS','MA','CS' ); 
[例12] 查询学号为95001的学生的详细情况。 
 SELECT *  
 FROM Student  
 WHERE Sno LIKE '95001'; 
等价于:  
 SELECT *  
 FROM Student  
 WHERE Sno = '95001'; 
[例13] 查询所有姓刘学生的姓名、学号和性别。 
 SELECT Sname,Sno,Ssex 
 FROM Student 
 WHERE Sname LIKE ‘刘%’; 
[例14] 查询姓"欧阳"且全名为三个汉字的学生的姓名。 
 SELECT Sname 
 FROM Student 
 WHERE Sname LIKE '欧阳__'; 
[例15] 查询名字中第2个字为"阳"字的学生的姓名和学号。 
 SELECT Sname,Sno 
 FROM Student 
 WHERE Sname LIKE '__阳%'; 
[例16] 查询所有不姓刘的学生姓名。 
 SELECT Sname,Sno,Ssex 
 FROM Student 
 WHERE Sname NOT LIKE '刘%'; 
[例17]  
使用换码字符将通配符转义为普通字符 
查询DB_Design课程的课程号和学分。 
 SELECT Cno,Ccredit 
 FROM Course 
 WHERE Cname LIKE 'DB\_Design'  
 ESCAPE '\' 
[例18] 查询以"DB_"开头,且倒数第3个字符为 i的课程的详细情况。 
 SELECT * 
 FROM Course 
 WHERE Cname LIKE 'DB\_%i_ _' ESCAPE ' \ '; 
[例19] 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。 
 SELECT Sno,Cno 
 FROM SC 
 WHERE Grade IS NULL; 
[例20] 查所有有成绩的学生学号和课程号。 
 SELECT Sno,Cno 
 FROM SC 
 WHERE Grade IS NOT NULL; 
[例21] 查询计算机系年龄在20岁以下的学生姓名。 
 SELECT Sname 
 FROM Student 
 WHERE Sdept= 'CS' AND Sage<20; 
[例22] 查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 
SELECT Sname,Ssex 
FROM Student 
WHERE Sdept IN ( 'IS','MA','CS' ) 
可改写为: 
SELECT Sname,Ssex 
FROM Student 
WHERE Sdept= ' IS ' OR Sdept= ' MA' OR Sdept= ' CS '; 
[例23] 查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 
 SELECT Sname,Sdept,Sage 
FROM Student 
WHERE Sage BETWEEN 20 AND 23; 
 可改写为: 
 SELECT Sname,Sdept,Sage 
FROM Student 
 WHERE Sage>=20 AND Sage<=23; 
[例24] 查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 

 SELECT Sno,Grade 
 FROM SC 
 WHERE Cno= ' 3 ' 
 ORDER BY Grade DESC;  
[例25] 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 

 SELECT * 
 FROM Student 
 ORDER BY Sdept,Sage DESC;  
[例26] 查询学生总人数。 
 SELECT COUNT(*) 
 FROM Student; 
  
[例27] 查询选修了课程的学生人数。 
 SELECT COUNT(DISTINCT Sno) 
 FROM SC; 
[例28] 计算1号课程的学生平均成绩。 

 SELECT AVG(Grade) 
 FROM SC 
 WHERE Cno= ' 1 '; 
  
[例29] 查询选修1号课程的学生最高分数。 
 SELECT MAX(Grade) 
 FROM SC 
 WHER Cno= ' 1 ';  

[例30] 求各个课程号及相应的选课人数。 
 SELECT Cno,COUNT(Sno) 
 FROM SC 
 GROUP BY Cno;  
[例31] 查询选修了3门以上课程的学生学号。 
 SELECT Sno 
 FROM SC 
 GROUP BY Sno 
 HAVING COUNT(*) >3;  
[例32] 查询有3门以上课程是90分以上的 
 学生的学号及(90分以上的)课程数 
 SELECT Sno, COUNT(*) 
 FROM SC 
 WHERE Grade>=90 
 GROUP BY Sno 
 HAVING COUNT(*)>=3;  
HAVING短语与WHERE子句的区别:作用对象不同 
WHERE子句作用于基表或视图,从中选择满足条件的元组。 
HAVING短语作用于组,从中选择满足条件的组。  
3)多表连接 
[例36] 查询每个学生的学号、姓名、选修的课程名及成绩。 
 SELECT Student.Sno,Sname,Cname,Grade 
 FROM Student,SC,Course 
 WHERE Student.Sno = SC.Sno 
 and SC.Cno = Course.Cno; 
4)嵌套查询 
求解方法:是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 

[例37]查询选修了课程名为“信息系统”的学生学号和姓名 
 SELECT Sno,Sname ③ 最后在Student关系中 
 FROM Student 取出Sno和Sname 
 WHERE Sno IN 
 (SELECT Sno ② 然后在SC关系中找出选 
 FROM SC 修了3号课程的学生学号 
 WHERE Cno IN 
 (SELECT Cno ① 首先在Course关系中找出“信 
 FROM Course 息系统”的课程号,结果为3号 
 WHERE Cname= ‘信息系统’)); 
[例38] 查询其他系中比信息系任意一个(其中某一个)学生年龄小的学生姓名和年龄 
 SELECT Sname,Sage 
 FROM Student 
 WHERE Sage < ANY (SELECT Sage 
 FROM Student 
 WHERE Sdept= ' IS ') 
 AND Sdept <> ' IS ' ;  
[例39] 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄。 
方法一:用ALL谓词 
 SELECT Sname,Sage 
 FROM Student 
 WHERE Sage < ALL 
 (SELECT Sage 
 FROM Student 
 WHERE Sdept= ' IS ') 
 AND Sdept <> ' IS ’; 
[例41] 查询所有选修了1号课程的学生姓名。 
–用嵌套查询 
 SELECT Sname 
 FROM Student 
 WHERE EXISTS 
 (SELECT * 
 FROM SC /*相关子查询*/ 
 WHERE Sno=Student.Sno AND   Cno= ' 1 '); 
[例40] 查询选修了全部课程的学生姓名。 
 SELECT Sname 
 FROM Student 
 WHERE NOT EXISTS 
 (SELECT * 
 FROM Course 
 WHERE NOT EXISTS 
 (SELECT * 
 FROM SC 
 WHERE Sno= Student.Sno 
 AND Cno= Course.Cno); 

[例50] 查询学生姓名与教师姓名的交集 
 SELECT DISTINCT Sname 
 FROM Student 
 WHERE Sname IN  
   (SELECT Tname 
 FROM Teacher); 
5)插入数据 
1. 插入单个元组 
语句格式 
INSERT 
INTO <表名> [(<属性列1>[,<属性列2 >…]) 
VALUES (<常量1> [,<常量2>] … ) 
INTO子句 
指定要插入数据的表名及属性列 
属性列的顺序可与表定义中的顺序不一致 
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致 
指定部分属性列:插入的元组在其余属性列上取空值 
 VALUES子句 
提供的值必须与INTO子句匹配 
值的个数 
值的类型 

[例1] 将一个新学生记录 
(学号:95020;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。 
 INSERT 
 INTO Student 
 VALUES ('95020','陈冬','男','IS',18); 
[例2] 插入一条选课记录( '95020','1 ')。 
 INSERT 
 INTO SC(Sno,Cno) 
 VALUES (' 95020 ',' 1 '); 
2. 插入子查询结果 
 语句格式 
 INSERT  
 INTO <表名> [(<属性列1> [,<属性列2>… )] 
 子查询 ;  
  功能  
 将子查询结果插入指定表中  
插入子查询结果

INTO子句(与插入单条元组类似) 
 指定要插入数据的表名及属性列 
 属性列的顺序可与表定义中的顺序不一致 
 没有指定属性列:表示要插入的是一条完整的元组 
 指定部分属性列:插入的元组在其余属性列上取空值 
  子查询 
 SELECT 子句目标列必须与INTO 子句匹配  
 值的个数 
 值的类型 
DBMS在执行插入语句时会检查所插元组是 
否破坏表上已定义的完整性规则 
实体完整性 
参照完整性 
用户定义的完整性 
对于有NOT NULL约束的属性列是否提供了非空值 
对于有UNIQUE约束的属性列是否提供了非重复值 
对于有值域约束的属性列所提供的属性值是否在值域范围内 
6)修改数据 
[例1] 将学生95001的年龄改为22岁。 
 UPDATE Student 
 SET Sage=22 
 WHERE Sno=' 95001 ';  
[例2] 将所有学生的年龄增加1岁。 
 UPDATE Student 
 SET Sage= Sage+1; 
[例6] 将信息系所有学生的年龄增加1岁。 
 UPDATE Student 
 SET Sage= Sage+1 
 WHERE Sdept=' IS '; 
[例7] 将计算机科学系全体学生的成绩置零。 
 UPDATE SC 
 SET Grade=0 
 WHERE Sno in 
 (SELECT sno 
 FROM Student 
 WHERE dept=“CS”); 
7)删除数据 
[例8] 删除学号为95019的学生记录。 
 DELETE 
 FROM Student 
 WHERE Sno='95019'; 
 [例9] 删除2号课程的所有选课记录。 
 DELETE 
 FROM SC; 
 WHERE Cno='2'; 
 [例10] 删除所有的学生选课记录。 
 DELETE 
 FROM SC; 
[例11] 删除计算机科学系所有学生的选课记录。 
 DELETE 
 FROM SC 
 WHERE sno in 
 (SELECT sno 
 FROM Student 
 WHERE sno=“CS”); 
DBMS在执行插入、删除、更新语句时必须保证数据库一致性,必须有事务的概念和原子性 
完整性检查和保证 
20、 视图 
视图的特点 
虚表,是从一个或几个基本表(或视图)导出的表,只存放视图的定义,不会出现数据冗余,基表中的数据发生变化,从视图中查询出的数据也随之改变 
1) 常见的视图形式 
行列子集视图 
WITH CHECK OPTION的视图 
基于多个基表的视图 
基于视图的视图 
带表达式的视图 
分组视图 
2) 建立视图 
语句格式 
 CREATE VIEW  
 <视图名> [(<列名> [,<列名>]…)] 
 AS <子查询> 
 [WITH CHECK OPTION]; 
DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。 
WITH CHECK OPTION透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式) 

例:建立信息系学生的视图。 
 CREATE VIEW IS_Student 
 AS  
 SELECT Sno,Sname,Sage 
 FROM Student 
 WHERE Sdept= 'IS'; 

[例7] 将学生的学号及他的平均成绩定义为一个视图 
 假设SC表中“成绩”列Grade为数字型 
 CREAT VIEW S_G(Sno,Gavg) 
 AS  
 SELECT Sno,AVG(Grade) 
 FROM SC 
 GROUP BY Sno; 

以 SELECT * 方式创建的视图可扩充性差,应尽可能避免 
3) 删除视图 
DROP VIEW <视图名>; 
该语句从数据字典中删除指定的视图定义 
由该视图导出的其他视图定义仍在数据字典中,但已不能使用,必须显式删除 
删除基表时,由该基表导出的所有视图定义都必须显式删除 
4)更新视图 
用户角度:更新视图与更新基本表相同 
DBMS实现视图更新的方法 
视图实体化法(View Materialization) 
视图消解法(View Resolution) 
指定WITH CHECK OPTION子句后 
DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新 
实际系统对视图更新的限制 
允许对行列子集视图进行更新 
对其他类型视图的更新不同系统有不同限制 
DB2对视图更新的限制: 
(1) 若视图是由两个以上基本表导出的,则此视图不允许更新。 
(2) 若视图的字段来自字段表达式或常数,则不允许对此视图执行INSERT和UPDATE操作,但允许执行DELETE操作。

3) 若视图的字段来自集函数,则此视图不允许更新。 
(4) 若视图定义中含有GROUP BY子句,则此视图不允许更新。 
(5) 若视图定义中含有DISTINCT短语,则此视图不允许更新。 
(6) 若视图定义中有嵌套查询,并且内层查询的FROM子句中涉及的表也是导出该视图的基本表,则此视图不允许更新。 
(7) 一 个不允许更新的视图上定义的视图也不允许更新 

[例3 ] 建立1号课程的选课视图,并要求透过该视图进行的更新操作只涉及1号课程,同时对该视图的任何操作只能在工作时间进行。 
 CREATE VIEW IS_SC 
 AS  
 SELECT Sno,Cno,Grade 
 FROM SC 
 WHERE Cno= '1'  
 AND TO_CHAR(SYSDATE,'HH24') BETWEEN 9 AND 17  
 AND TO_CHAR(SYSDATE,'D') BETWEEN 1 AND 5 
 WITH CHECK OPTION; 

21、 自然连接、等值连接、非等值连接P82-P84 
等值连接(equijoin)  
什么是等值连接 
θ为“=”的连接运算称为等值连接  
等值连接的含义 
从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组,即等值连接为: 
自然连接(Natural join)  
自然连接是一种特殊的等值连接 
两个关系中进行比较的分量必须是相同的属性组 
在结果中把重复的属性列去掉 
22、 数据控制(授权、收回) 
GRANT语句的一般格式: 
GRANT <权限>[,<权限>]...  
[ON <对象类型> <对象名>] 
TO <用户>[,<用户>]... 
[WITH GRANT OPTION]; 
GRANT功能:将对指定操作对象的指定操作权限授予指定的用户 
指定了WITH GRANT OPTION子句: 
 获得某种权限的用户还可以把这种权限再授予别的用户。 
没有指定WITH GRANT OPTION子句: 
 获得某种权限的用户只能使用该权限,不能传播该权限 

例5 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户 
GRANT INSERT  
ON TABLE SC  
TO U5 
WITH GRANT OPTION; 

REVOKE语句的一般格式为: 
REVOKE <权限>[,<权限>]...  
[ON <对象类型> <对象名>] 
FROM <用户>[,<用户>]...; 

功能:从指定用户那里收回对指定对象的指定权限 
例9 把用户U5对SC表的INSERT权限收回 
REVOKE INSERT  
ON TABLE SC  
FROM U5; 

23、 循环嵌套法的思路 
嵌套查询的求解方法是由里向外处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。 
24、 1NF、2NF、3NF、BCNF、4NF的定义 函数依赖的概念P129 
第一范式:如果一个关系模式R的所有属性都是不可分的基本数据项,则R属于1NF 
第二范式:若关系模式R属于1NF,并且每一个非主属性都完全函数依赖于R的码,则R属于2NF 
第三范式:如果关系模式R中不存在候选码X,属性组Y以及非主属性Z(ZÍ 
 Y),使得X→Y,Y→Z和Y→/X成立,则R属于3NF. 
BC范式:设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,若Y Í\X,则X必含有候选码,那么R∈BCNF.  
第四范式:关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y Í X),X都含有候选码,则R∈4NF。 
函数依赖:设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。X称为这个函数依赖的决定属性集(Determinant)。 

25、 用户标识和鉴定、存取控制、定义视图、审计、数据加密 定义概念 
用户标识和鉴定:用户标识和鉴定是系统提供的最外层的安全保护措施,其方法是由系统提供一定的方式让用户标识自己的名字或身份,系统内部矛盾记录着所有合法用户的标识,每次用户要求进入系统时,由系统进行核实,通过鉴定后才提供机器的使用权。 
存取控制:指的是不同的用户对于不同的数据对象允许执行的操作权限 
定义视图:为不同的用户定义不同的视图,可以限制各个用户的访问范围。 通过视图机制 把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。

审计:审计功能是一种监视措施,跟踪记录有关数据的访问活动。 审计追踪 把用户对数据库的所有操作自动记录下来,存放在一个特殊文件中,即审计日志(Audit Log)中。  
数据加密:数据加密是防止数据库中数据在存储和传输中失密的有效手段。 加密的基本思想是根据一定的算法将原始数据(术语为明文,Plain text)加密成为不可直接识别的格式(术语为密文,Clipher text),数据以密码的形式存储和传输。 
26、 完整性定义 
数据库的完整性是指数据的正确性和相容性 
27、 完整性和安全性的区别 
数据的完整性与安全性是数据库的两个不同的方面, 安全性是防止用户非法使用数据库,包括恶意数据和越权存取数据。完整性则是防止合法用户使用数据库时向数据库中加入不合语义的数据。也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。 
28、 DBMS完整性控制机制的三个功能P155-P156 
定义功能,即提供定义完整性约束条件的机制。 
检查功能,即用户发出的操作请求是否违背了完整性约束条件 
如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。 
29、 并发控制,什么是事物?P161 
并发控制的好坏是衡量一个数据库管理系统性能的重要标志之一。 
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位 
事务和程序是两个概念 
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序 
一个应用程序通常包含多个事务 
30、 事物的酸性P162 
原子性A:一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 
一致性C:事务必须是使数据库从一个一致性状态变到另一个一致性状态。 
隔离性I:一个事务的执行不能被其他事务干扰。 
持续性D:也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 
31、 提交和回滚P162 
COMMIT表示提交,即提交事务的所有操作。肯体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。 
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,滚回到事务开始时的状态。 
32、 并发操作与数据不一致性的三类P162 
丢失修改:丢失修改是指事务1与事务2从数据库中读入同一数据并修改,事务2的提交结果破坏了事务1的提交的结果。导致事务1的修改被丢失。 
不可重复读:不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。 
读“脏”数据:指事务1修改某一数据,并将其写回磁盘,事务2读取同一数据后,事务1由于某种原因被撤销,这时事务1已修改过的数据恢复原值,事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称“脏”数据。 
33、 恢复是衡量系统性能优劣的重要指标 
34、 三类故障:事物故障、系统故障、介质故障 定义产生P173 
事物故障:事务在运行过程中由于种种原因,如输入数据的错误、运算溢出、违反了某些完整性限制、某些应用程序的错误以及并行事务发生死锁等,使事务未运行至正常终止点就夭折了,这种情况称为事务故障。 
系统故障:指运行过程中,由于某种原因,如操作呈DBMS代码错误、操作员操作失误、特定类型的硬件错误(如CPU故障)、突然停电等造成系统停止运行,致使所有正在运行都以非常方式终止。这时内存中数据库缓冲的信息全部丢失,但存储在外部存储器的数据未受影响。这种情况称为系统故障。 
介质故障:系统在运行过程中,由于某种硬件故障,如磁盘损坏、磁头碰撞,或操作系统的某种潜在错误,瞬时强磁场干扰等,使存储在外存中的数据部分丢失或全部丢失。这种情况发生的可能性小,但破坏性最大。 
35、 恢复的定义P175 
恢复就是利用存储在系统其他地方的冗余数据来修复数据库中被破坏的或不正确的数据。因此恢复机制涉及的两个关键问题是:第一,如何建立冗余数据;第二,如何利用这些冗余数据实施数据库恢复。建立冗余数据最常用的技术是数据转储和登录日志文件。通常在一个数据库系统中,这两种方法是一起使用的。 
36、 数据转储:静态、动态,海量、增量P176表5-7 
静态转储优点是简单,但由于转储必须等待用户事务结束才能进行,而新的事务必须等待转储结束才能执行,因此会降低数据库的可用性 
动态转储不用等待正在运行的用户事务结束,也不会影响新的事务的运行。但它不能保证副本中的数据正确有效。 
海量转储指每次转储全部数据库,增量转储是指只转储上次转储后更过的数据。 
数据转储分类:动态海量转储、动态增量转储、静态海量转储、静态增量转储 
37、 恢复策略、过程 
事务故障的恢复 
1. 反向扫描文件日志,查找该事务的更新操作 
2. 对该事务的更新操作执行操作。 
3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理。 
系统故障的恢复 
1. 扫描日志文件,找出在故障发生前已经提交事务,将其事务标识记入重做队列。 
2. 对撤销队列中的各个事务进行撤销处理 
3. 对重做队列中的各个事务进行重做处理 
介质故障的恢复 
1、 装入最新的后备数据库副本,还须同时装入转储时刻的日志文件副本,利用与恢复系统故障相同的方法,才能将数据库恢复到一致性状态。 
2、 装入有关的日志文件副本,重做已完成的事务。 
3、 需要DBA介入。 
38、 数据库设计各阶段P184 
需求分析阶段:进行数据设计首先必须准确了解与分析用户需求。他是整个设计过程的基础,是最困难、费时间的一步。 
概念结构设计阶段:是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型。 
逻辑结构设计阶段:是将概念结构转制为某个DBMS所支持的数据模型,并对其进行优化。 
数据库物理设计阶段:是为逻辑数据模型选取一个最适合应用环境的物理结构。(存储结构和存取方法) 
数据库实施阶段:在数据库实施阶段,设计人员运用DBMS提供的数据语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。 
数据库运行和维护阶段 
数据库应用系统经过试运行后,即可投入正式运行,在运行过程中必须不断地对其进行评价、调整和修改。


好东西来源:http://tieba.baidu.com/f?kz=106323257

你可能感兴趣的:(DB入门,数据库,数据结构,存储,语言,insert,加密)