自考_互联网数据库SQL语句实例学习汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL语句实例学习汇总
表操作
例 1 对于表的教学管理数据库中的表STUDENTS ,可以定义如下:Create TABLE STUDENTS
(SNO NUMERIC (6, 0) NOT NULL
SNAME CHAR (8) NOT NULL
AGE NUMERIC(3,0)
SEX CHAR(2)
BPLACE CHAR(20)
PRIMARY KEY(SNO))
例 2 对于表的教学管理数据库中的表ENROLLS ,可以定义如下:Create TABLE ENROLLS
(SNO NUMERIC(6,0) NOT NULL
CNO CHAR(4) NOT NULL
GRADE INT
PRIMARY KEY(SNO,CNO)
FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)
FOREIGN KEY(CNO) REFERENCES COURSES(CNO)
CHECK ((GRADE IS NULL) or (GRADE BETWEEN 0 AND 100)))
例 3 根据表的STUDENTS 表,建立一个只包含学号、姓名、年龄的女学生表。
Create TABLE GIRL
AS Select SNO, SNAME, AGE
FROM STUDENTS
Where SEX=' 女';
例 4 删除教师表TEACHER 。
Drop TABLE TEACHER
例 5 在教师表中增加住址列。
Alter TABLE TEACHERS
ADD (ADDR CHAR(50))
例 6 把STUDENTS 表中的BPLACE 列删除,并且把引用BPLACE 列的所有视图和约束也一起删除。
Alter TABLE STUDENTS
Drop BPLACE CASCADE
例7 补充定义ENROLLS 表的主关键字。
Alter TABLE ENROLLS
ADD PRIMARY KEY (SNO,CNO) ;
视图操作(虚表)
例9 建立一个只包括教师号、姓名和年龄的视图FACULTY 。
( 在视图定义中不能包含orDER BY 子句)
Create VIEW FACULTY
AS Select TNO, TNAME, AGE
FROM TEACHERS
例10 从学生表、课程表和选课表中产生一个视图GRADE_TABLE ,它包括学生姓名、课程名和
成绩。
Create VIEW GRADE_TABLE
AS Select SNAME,CNAME,GRADE
FROM STUDENTS,COURSES,ENROLLS
Where STUDENTS.SNO =ENROLLS.SNO AND
O=O
例11 删除视图GRADE_TABLE
Drop VIEW GRADE_TABLE RESTRICT
索引操作
例12 在学生表中按学号建立索引。
Create UNIQUE INDEX ST
ON STUDENTS (SNO,ASC)
例13 删除按学号所建立的索引。
Drop INDEX ST
数据库模式操作
例14 创建一个简易教学数据库的数据库模式TEACHING_DB ,属主为ZHANG 。
Create SCHEMA TEACHING_DB AUTHRIZATION ZHANG
例15 删除简易教学数据库模式TEACHING_DB 。
(( 1 )选用CASCADE ,即当删除数据库模式时,则本数据库模式和其下属的基本表、视图、索引等全部被删除。
( 2 )选用RESTRICT ,即本数据库模式下属的基本表、视图、索引等事先已清除,才能删除本数据库模式,否则拒绝删除。
)
Drop SCHEMA TEACHING_DB CASCADE
单表操作
例16 找出 3 个学分的课程号和课程名。
Select CNO, CNAME
FROM COURSES
Where CREDIT =3
例17 查询年龄大于22 岁的学生情况。
Select *
FROM STUDENTS
Where AGE >22
例18 找出籍贯为河北的男生的姓名和年龄。
Select SNAME, AGE
FROM STUDENTS
Where BPLACE =' 河北' AND SEX =' 男'
例19 找出年龄在20 ~23 岁之间的学生的学号、姓名和年龄,并按年龄升序排序。
(ASC (升序)或DESC (降序)声明排序的方式,缺省为升序。
)
Select SNO, SNAME, AGE
FROM STUDENTS
Where AGE BETWEEN 20 AND 23
orDER BY AGE
例20 找出年龄小于23 岁、籍贯是湖南或湖北的学生的姓名和性别。
(条件比较运算符=、<和逻辑运算符AND (与),此外还可以使用的运算符有:>(大于)、>=(大于等于)、<=(小于等于)、<>(不等于)、NOT (非)、or (或)等。
谓词LIKE 只能与字符串联用,常常是“ <列名>LIKE pattern” 的格式。
特殊字符“_” 和“%” 作为通配符。
谓词IN 表示指定的属性应与后面的集合(括号中的值集或某个查询子句的结果)中的某个值相匹配,实际上是一系列的or (或)的缩写。
谓词NOT IN 表示指定的属性不与后面的集合中的某个值相匹配。
谓词BETWEEN 是“ 包含于… 之中” 的意思。
)
Select SNAME, SEX
FROM STUDENTS
Where AGE <23 AND BPLACE LIKE' 湖%'
或
Select SNAME, SEX
FROM STUDENTS
Where AGE <23 AND BPLACE IN (' 湖南' ,' 湖北' )
例22 找出学生表中籍贯是空值的学生的姓名和性别。
(在SQL 中不能使用条件:<列名>=NULL 。
在SQL 中只有一个特殊的查询条件允许查询NULL 值:)
Select SNAME, SEX
FROM STUDENTS
Where BPLACE IS NULL
多表操作
例23 找出成绩为95 分的学生的姓名。
(子查询)
Select SNAME
FROM STUDENTS
Where SNO =
(Select SNO
FROM ENROLLS
Where GRADE =95)
例24 找出成绩在90 分以上的学生的姓名。
Select SNAME
FROM STUDENTS
Where SNO IN
(Select SNO
FROM ENROLLS
Where GRADE >90)
或
Select SNAME
FROM STUDENTS
Where SNO =ANY
(Select SNO
FROM ENROLLS
Where GRADE >90)
例25 查询全部学生的学生名和所学课程号及成绩。
(连接查询)
Select SNAME, CNO, GRADE
FROM STUDENTS, ENROLLS
Where STUDENTS.SNO =ENROLLS.SNO
例26 找出籍贯为山西或河北,成绩为90 分以上的学生的姓名、籍贯和成绩。
(当构造多表连接查询命令时,必须遵循两条规则。
第一,连接条件数正好比表数少 1 (若有三个表,就有两个连接条件) ;第二,若一个表中的主关键字是由多个列组成,则对此主关键字中的每一个列都要有一个连接条件(也有少数例外情况))
Select SNAME, BPLACE, GRADE
FROM STUDENTS, ENROLLS
Where BPLACE IN (… 山西‟ ,… 河北‟) AND GRADE >=90 AND
STUDENTS.SNO=ENROLLS.SNO
例28 查出课程成绩在80 分以上的女学生的姓名、课程名和成绩。
(FROM 子句中的子查询)
Select SNAME,CNAME, GRADE
FROM (Select SNAME, CNAME , GRADE
FROM STUDENTS, ENROLLS,COURSES
Where SEX =' 女')
AS TEMP (SNAME, CNAME,GRADE)
Where GRADE >80
表达式与函数的使用
例29 查询各课程的学时数。
(算术表达式由算术运算符+、-、* 、/与列名或数值常量所组成。
)
Select CNAME,COURSE_TIME =CREDIT*16
FROM COURSES
例30 找出教师的最小年龄。
(内部函数:SQL 标准中只使用COUNT 、SUM 、AVG 、MAX 、MIN 函数,称之为聚集函数(Set Function )。
COUNT 函数的结果是该列统计值的总数目,SUM 函数求该列统计值之和,AVG 函数求该列统计值之平均值,MAX 函数求该列最大值,MIN 函数求该列最小值。
)
Select MIN(AGE)
FROM TEACHERS
例31 统计年龄小于等于22 岁的学生人数。
(统计)
Select COUNT(*)
FROM STUDENTS
Where AGE < =22
例32 找出学生的平均成绩和所学课程门数。
Select SNO, AVG(GRADE), COURSES =COUNT(*)
FROM ENROLLS
GROUP BY SNO
例34 找出年龄超过平均年龄的学生姓名。
Select SNAME
FROM STUDENTS
Where AGE >
(Select AVG(AGE)
FROM STUDENTS)
例35 找出各课程的平均成绩,按课程号分组,且只选择学生超过 3 人的课程的成绩。
(GROUP BY 与HAVING
GROUP BY 子句把一个表按某一指定列(或一些列)上的值相等的原则分组,然后再对每组数据进行规定的操作。
GROUP BY 子句总是跟在Where 子句后面,当Where 子句缺省时,它跟在FROM 子句后面。
HAVING 子句常用于在计算出聚集之后对行的查询进行控制。
)
Select CNO, AVG(GRADE), STUDENTS =COUNT(*)
FROM ENROLLS
GROUP BY CNO
HAVING COUNT(*) >= 3
相关子查询
例37 查询没有选任何课程的学生的学号和姓名。
(当一个子查询涉及到一个来自外部查询的列时,称为相关子查询(Correlated Subquery) 。
相关子查询要用到存在测试谓词EXISTS 和NOT EXISTS ,以及ALL 、ANY (SOME )等。
)
Select SNO, SNAME
FROM STUDENTS
Where NOT EXISTS
(Select *
FROM ENROLLS
Where ENROLLS.SNO=STUDENTS.SNO)
例38 查询哪些课程只有男生选读。
Select DISTINCT CNAME
FROM COURSES C
Where ' 男' =ALL
(Select SEX
FROM ENROLLS ,STUDENTS
Where ENROLLS.SNO=STUDENTS.SNO AND
O=O)
例39 要求给出一张学生、籍贯列表,该表中的学生的籍贯省份,也是其他一些学生的籍贯省份。
Select SNAME, BPLACE
FROM STUDENTS A
Where EXISTS
(Select *
FROM STUDENTS B
Where A.BPLACE=B.BPLACE AND
A.SNO < >
B.SNO)
例40 找出选修了全部课程的学生的姓名。
本查询可以改为:查询这样一些学生,没有一门课程是他不选修的。
Select SNAME
FROM STUDENTS
Where NOT EXISTS
(Select *
FROM COURSES
Where NOT EXISTS
(Select *
FROM ENROLLS
Where ENROLLS.SNO =STUDENTS.SNO
AND O =O))
关系代数运算
例41 设有某商场工作人员的两张表:营业员表SP_SUBORD 和营销经理表SP_MGR ,其关系数据模式如下:
SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
其中,属性SALPERS_ID 为工作人员的编号, SALPERS_NAME 为工作人员的姓名, MANAGER_ID 为所在部门经理的编号, OFFICE 为工作地点。
若查询全部商场工作人员,可以用下面的SQL 语句:
(Select * FROM SP_SUBORD)
UNION
或等价地用下面的SQL 语句:
Select *
FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)
( 2 )INTERSECT
(Select * FROM SP_SUBORD)
INTERSECT
(Select * FROM SP_MGR)
或等价地用下面的SQL 语句:
Select *
FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)
或用带ALL 的SQL 语句:
(Select * FROM SP_SUBORD)
INTERSECT ALL
(Select * FROM SP_MGR)
或
Select *
FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)
( 3 )EXCEPT
(Select * FROM SP_MGR)
EXCEPT
(Select * FROM SP_SUBORD)
或等价地用下面的SQL 语句:
Select *
FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)
或用带ALL 的SQL 语句:
(Select * FROM SP_MGR)
EXCEPT ALL
(Select * FROM SP_SUBORD)
例42 查询籍贯为四川、课程成绩在80 分以上的学生信息及其成绩。
(自然连接)
Where BPLACE=… 四川‟)
NATURAL JOIN
(Select * FROM ENROLLS
Where GRADE >=80)
例3.43 列出全部教师的姓名及其任课的课程号、班级。
(外连接与外部并外连接允许在结果表中保留非匹配元组,空缺部分填以NULL 。
外连接的作用是在做连接操作时避免丢失信息。
外连接有 3 类:
( 1 )左外连接(Left Outer Join )。
连接运算谓词为LEFT [OUTER] JOIN ,其结果表中保留左关系的所有元组。
( 2 )右外连接(Right Outer Join )。
连接运算谓词为RIGHT [OUTER] JOIN ,其结果表中保留右关系的所有元组。
( 3 )全外连接(Full Outer Join )。
连接运算谓词为FULL [OUTER] JOIN ,其结果表中保留左右两关系的所有元组。
)
Select TNAME, CNO, CLASS
FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)
SQL 的数据操纵
例44 把教师李映雪的记录加入到教师表TEACHERS 中。
(插入)
Insert INTO TEACHERS
VALUES(1476 ,' 李映雪' ,44 ,' 副教授')
例45 成绩优秀的学生将留下当教师。
Insert INTO TEACHERS (TNO ,TNAME)
Select DISTINCT SNO ,SNAME
FROM STUDENTS ,ENROLLS
Where STUDENTS.SNO =ENROLLS.SNO AND GRADE >=90
例47 把所有学生的年龄增加一岁。
(修改)
Update STUDENTS
SET AGE =AGE+1
例48 学生张春明在数据库课考试中作弊,该课成绩应作零分计。
Update ENROLLS
SET GRADE =0
Where CNO ='C1' AND
' 张春明' =
(Select SNAME
FROM STUDENTS
Where STUDENTS.SNO=ENROLLS.SNO)
例49 从教师表中删除年龄已到60 岁的退休教师的数据。
(删除)
Delete FROM TEACHERS
Where AGE >=60
SQL 的数据控制
例50 授予LILI 有对表STUDENTS 的查询权。
(表/视图特权的授予)
一个SQL 特权允许一个被授权者在给定的数据库对象上进行特定的操作。
授权操作的数据库对象包括:表/ 视图、列、域等。
授权的操作包括:Insert 、Update 、Delete 、Select 、REFERENCES 、TRIGGER 、UNDER 、USAGE 、EXECUTE 等。
其中Insert 、Update 、Delete 、Select 、REFERENCES 、TRIGGER 有对表做相应操作的权限,故称为表特权。
)
GRANT Select ON STUDENTS
TO LILI
WITH GRANT OPTION
§1
1.数据库技术是随着数据管理的需要而产生的。
数据处理的的核心是数据管理。
数据管理指的是对数据的分类、组织、编码、储存、检索和维护。
2.数据管理技术共经历了三个阶段:
人工管理阶段、文件系统阶段、数据库系统阶段
3. 人工管理阶段:
数据不保存、数据需要由应用程序自己进行管理、
基本上没有文件概念、数据不共享
4.文件系统阶段:
数据可以长期保存、文件系统管理数据、
文件已经多样化、数据的存取基本上以记录为单位。
缺点有:数据共享性差,数据冗余度大;数据和程序缺乏独立性
5.数据库管理阶段:
(1)数据结构化。
(2)数据共享性高、冗余度小、易扩充。
(3)数据独立性高。
(4)统一的数据管理和控制:数据的安全性保护、数据的完整性控制、数据库恢复和并发控制。
(5)数据的最小存取单位是数据项。
DB:数据库(Database),DB是统一管理的相关数据的集合。
DBMS:数据库管理系统(Database Management System),DBMS是位于用户与操作系统之间的一层数据管理软件,为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更新及各种数据控制。
DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型、面向对象型DBMS。
DBS:数据库系统(Database System),DBS是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软件、硬件和数据资源组成的系统,即采用了数据库技术的计算机系统。
数据库技术:是一门研究数据库结构、存储、管理和使用的软件学科。
第一代数据库系统,即层次数据库系统和网状数据库系统
第二代数据库系统,即关系数据库系统
第三代数据库系统,即面向对象数据库系统
数据库学科的研究范围:数据库管理系统软件的研制; 数据库设计; 数据库理论
数据模型是现实世界数据特征的抽象。
是数据库系统的核心和基础。
数据模型应满足三方面要求:一是能比较真实地模拟现实世界;二是容易为人所理解;三是便于在计算机上实现。
根据模型应用目的分为:⑴概念模型,也称信息模型,它是按用户的观点对数据和信息建模。
⑵数据模型,主要包括层次模型、网状模型、关系模型和面向对象数据模型,它是按计算机系统的观点对数据建模。
数据模型三个要素:
⑴数据结构描述系统的静态特性
⑵数据操作描述系统的动态特性
⑶数据的约束条件是一组完整性规则的集合
概念模型
数据描述的三个领域:现实世界、信息世界和机器世界
数据描述的两种形式:物理描述和逻辑描述。
前者是指数据在存储设备上的存取方式,后者是指程序员或用户以用以操作的数据形式。
两个实体型之间的联系可以分为三类:
一对一联系(1∶1);一对多联系(1∶n);多对多联系(m∶n)
E-R图提供了表示实体型、属性和联系的方法。
实体-联系方法(E-R方法)是抽象和描述现实世界的有力工具。
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,并用无向边将其与相应的实体连接起来。
联系:用菱形表示,菱形框内写明联系名,并用无向边分别志有关实体连接起来,同时在无向边旁标上联系的类型(1∶1,1∶n或m∶n)。
数据模型
数据模型: 层次模型、网状模型、关系模型和面向对象数据模型。
其中层次模型和网状模型统称为非关系模型。
层次模型:用树型结构表示实体间联系的数据模型
层次模型有以下两个限制:
⑴只有一个结点没有双亲结点,称之为根结点;
⑵根以外的其他结点有且只有一个双亲结点。
层次数据模型可以直接表示一对多(包括一对一)的联系;
层次模型表示多对多联系,必须首先将其分解成一对多联系。
分解方法有两种:冗余结点法和虚拟结点法。
网状模型:用有向图结构表示实体类型及实体间联系的数据模型。
(1)允许一个以上的结点无双亲;(2)一个结点可以有多于一个的双亲。
关系模型:是由若干个关系模式组成的集合,其主要特征是用二维表格结构表达实体集,用外鍵表示实体间联系。
关系模型要求关系必须是规范化的,即要求关系模式必须满足一定的规范条件,这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项,也就是说,不允许表中还有表。
数据系统的三级模式结构:外模式(物理模式)、模式(逻辑模式)和内模式
两级映象:
外模式/模式映象一般在外模式中描述。
模式/内模式映象一般在内模式中描述。
两层映象保证了数据库系统中的数据能够具有较高的逻辑独立性和物理独立性。
数据库管理系统的功能:
⑴数据定义
⑵数据操纵
⑶数据库运行管理
⑷数据组织、存储和管理
⑸数据库的建立和维护
⑹数据通信接口
数据库管理系统组成:
⑴数据定义语言及其翻译处理程序
⑵数据操纵语言及其编译(或解释)程序
⑶数据库运行控制程序
⑷实用程序
一个设计优良的DBMS:
⑴友好的用户界面
⑵比较完备的功能
⑶较高的运行效率
⑷清晰的系统结构和开放性
§2
关系数据库系统与非关系数据库系统的区别是,关系系统只有"表"这一种数据结构;而非关系数据库系统还有其他数据结构,对这些数据结构有其他的操作。
关系模型的组成:关系数据结构、关系操作集合、关系完整性约束
关系数据语言
关系代数语言例如ISBL
元组关系演算语言例如ALPHA,QUEL
关系演算语言
域关系演算语言例如QBE
具有关系代数和关系演算双重特点的语言例如SQL
关系的三类完整性约束:实体完整性、参照完整性和用户定义的完整性
实体完整性规则:要求关系中组成主键的属性上不能有空值。
参照完整性规则:要求不引用不存在的实体。
用户定义完整性规则:由具体应用环境决定,系统提供定义和检验这类完整性的机制。
关系数据语言的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。
基本关系具有以下六条性质:
①列是同质的(Homogeneous),即每一列中的分量同一类型的数据,来自同一个域。
②不同的列可出自同一个域,称其中的每列为一个属性,不同的属性要给予不同的属性名。
③列的顺序无所谓,即列的次序可以任意交换。
④任意两个元组不能完全相同。
⑤行的顺序无所谓,即行的次序可以任意交换。
⑥分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系模型要求关系必须是规范化的,即要求关系模式必须满足一定的规范条件。
这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。
关系是关系模式在某一个时刻的状态或内容。
关系模式是静态的,稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
但在实际当中,人们常常把关系模式和关系都称为关系。
实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言的。
一个基本表通常对应现实世界的一个实体集。
例如学生关系对应于学生的集合。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)相应地,关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。
所谓空值就是"不知道"或"无意义"的值。
关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表
元组变量主要有两方面的用途:
①简化关系名。
②操作条件中使用量词时必须用元组变量。
§3
SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体。
特点包括:①综合统一、②高度非过程化、③面向集合的操作方式、④以同一种语法结构提供两种使用方式、⑤语言简洁,易学易用。
定义和合理地使用视图能带来的好处为:
⑴、视图能够简化用户的操作
⑵、视图使用户能以多种角度看待同一数据
⑶、视图对重构数据库提供了一定程度的逻辑独立性
⑷、视图能够对机密数据提供安全保护
视图更新操作规则的限制:
如果视图是从多个基本表使用联接操作导出的,则不允许更新。
如果导出的视图使用了分组和聚合操作,也不允许更新。
如果视图是从单个基本表使用选择和投影操作导出的,并且包括了基本表的主键或某个候选键,则可以执行操作。
SQL中数据控制功能包括事务管理功能和数据保护功能,即数据库的恢复、并发控制;数据库的安全性和完整性。
§4
数据依赖是通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界
属性间相互联系的抽象,是数据内在的性质,是语义的体现。
现在人们已经提出了许多种类型的数据依赖,其中最重要的是函数依赖和多值依赖。
关系模式规范化时一般应遵循以下原则:
(1)关系模式进行无损连接分解。
(2)合理选择规范化程度。
(3)正确性与可实现性原则。
关系模式规范化的基本步骤如图所示。
①对1NF关系进行投影,消除原关系中非主属性对码的函数依赖,将1NF关系转换为若干个2NF关系。
②对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,从而产生一组3NF 关系。
③对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖(也就是说,使决定属性都成为投影的候选码),得到一组BCNF关系。
消除决定属性集非码的非平凡函数依赖
1NF
消除非主属性对码的部分函数依赖
2NF
消除非主属性对码的传递函数依赖
3NF
消除主属性对码的部分和传递函数依赖
BCNF
消除非平凡且非函数依赖的多值依赖
4NF
消除不是由候选码所蕴含的连接依赖
5NF
以上三步也可以合并为一步:对原关系进行投影,消除决定属性不是候选码的任何函数依赖。
④对BCNF关系进行投影,消除原关系中非平凡且非函数依赖的多值依赖,从而产生一组4NF关系。
⑤对4NF关系进行投影,消除原关系中不是由候选码所蕴含的连接依赖,即可得到一组5NF关系。
5NF是最终范式。
1NF/2NF/3NF存在的问题: ①插入异常②删除异常③数据冗余度大④修改复杂
BCNF问题:①数据冗余度大②增加操作复杂③删除操作复杂④修改操作复杂
关系模式分解的三个定义(判断对关系模式的一个分解是否与原关系模式等价可以有三种不同的标准):
(1)分解具有"无损连接性"。
(2)分解要"保持函数依赖"。
(3)分解既要"保持函数依赖",又要具有"无损连接性"。
规范化理论提供了一套完整的模式分解算法,按照这套算法可以做到:
①若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
②若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
③若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF
BCNF的关系模式都具有如下3个性质:
①所有非主属性都完全函数依赖于每个候选码。
②所有主属性都完全函数依赖于每个不包含它的候选码。
③没有任何属性完全函数依赖于非码的任何一组属性。
§5
数据库的被破坏主要有以下几个方面:
(1)系统的软、硬件故障,造成数据被破坏。
(2)数据库的并发操作引起数据的不一致性。
(3)自然的或人为的破坏。
(4)对数据库数据的更新操作有误。
针对上述问题,数据库管理系统提供相应的功能:
(1)数据库恢复:在系统失效后的数据库恢复,配合定时备份数据库,使数据库不丢失数据。
(2)并发控制:保证多用户能共享数据库,并维护数据的一致性。
(3)安全性保护:防止对数据库的非法使用,以避免数据的泄露、纂改或破坏。
(4)完整性保护:保证数据的正确性和一致性。
数据库安全控制的一般方法:
①用户标识和鉴定;②存取控制;③定义视图;④审计;⑤数据加密。
数据库的安全性主要是指保护数据库,防止由于非法使用数据库造成数据泄露、更改或破坏。
数据库的完整性:数据的正确性、一致性和相容性。
数据的完整性与安全性是数据库保护的两个不同的方面。
安全性是防止用户非法使用数据库。
完整性则是防止合法用户使用数据库时向数据库中加入不合语义的数据。
事务:并发控制的单位,是用户定义的一组数据库操作序列。
特征:原子性、一致性、隔离性、持久性。
并发控制的主要技术是采用封锁机制。
封锁就是事务T可以向系统发出请求,对某个数据对象(最常用的是记录)加锁。
于是事务T对这个数据对象就有一定的控制。
基本的封锁类型有两种:排它锁(X锁)和共享锁(S锁)。
和操作系统一样,封锁的方法可能引起活锁和死锁。
活锁是指当若干事务要对同一数据项加锁时,造成一些事务的永远等待,得不到控制权的现象;死锁是指两个以上事务集合中的每个事务都在等待加锁当前已被另一事务加锁的数据项,从而造成相互等待的现象。
数据库中解决死锁的常用方法有:
⑴、要求每个事务一次就将所有要使用的数据全部加锁,否则就不能执行。
⑵、采用按序加锁法。
⑶、不采取任何措施来预防死锁的发生,而是周期性的检查系统中是否有死锁。
可串行化的调度:如果几个事务并行(交错)执行的结果和按次序串行执行的结果相同,则称该并行执行结果是正确的。
这样的调度称为可串行化的调度。
两段锁协议是指所有事务必须分两个阶段对数据库项加锁和解锁。
两段锁协议规定所有的事务应遵守下列规则:
⑴、在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁。
⑵、在释放一个封锁之后,事务再获得任何其他封锁。
所谓“两段”锁含义是:事务分为两个阶段。
第一阶段是获得封锁,也称为扩展阶段。
在该阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。
第二阶段是释放封锁,也称为收缩阶段。
在该阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。
数据库系统故障可分为:事务内部的故障、系统故障、介质故障、计算机病毒。
转储:静态转储(转储期间不允许对数据库进行任何存取、修改活动)
动态转储(转储期间允许对数据进行存取或修改)
海量转储(每次转储全部数据库)
增量转储(每次只转储上次转储后更新过的数据)
日志文件是用来记录对数据库每一次更新活动的文件。
在转储中必须建立日志文件,后援副本和日志文件综合起来才能有效地恢复数据库。
利用日志文件恢复事务的过程:
①从头扫描日志文件,找出哪些事务在故障发生时已经结束,哪些事务尚未结束;
②对尚未结束的事务进行撤销处理,对已经结束的事务进行重做处理。