数据库知识点整理全doc.docx
《数据库知识点整理全doc.docx》由会员分享,可在线阅读,更多相关《数据库知识点整理全doc.docx(37页珍藏版)》请在冰豆网上搜索。
数据库知识点整理全doc
UNIT1
四个基本概念
1.数据(Data):
数据库中存储的基本对象
2.数据库的定义:
数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合
3.数据库管理系统(简称DBMS):
位于用户与操作系统之间的一层数据管理软件(系统软件)。
用途:
科学地组织和存储数据;高效地获取和维护数据
主要功能:
数据定义功能;数据操纵功能;数据库的运行管理;数据库的建立和
维护功能(实用程序)
4.数据库系统(DatabaseSystem,简称DBS):
指在计算机系统中引入数据库后的系统
数据库系统的构成
数据库
数据库管理系统(及其开发工具)
应用系统
数据库管理员(DBA)和用户
数据管理技术的发展过程
人工管理阶段
文件系统阶段
数据库系统阶段
数据库系统管理数据的特点如下
(1)数据共享性高、冗余少;
(2)数据结构化;(3)数据独立性高;(4)由DBMS进行统一
的数据控制功能
数据模型
用来抽象、表示和处理现实世界中的数据和信息的工具。
通俗地讲数据模型就是现实世界数
据的模拟。
数据模型三要素。
数据结构:
是所研究的对象类型的集合,它是刻画一个数据模型性质最重要的方面;数据结
构是对系统静态特性的描述
数据操作:
对数据库中数据允许执行的操作及有关的操作规则;对数据库中数据的操作主要
有查询和更改(包括插入、修改、删除);数据操作是对系统动态特性的描述
数据的约束条件:
数据及其联系应该满足的条件限制
E-R图
实体:
矩形框表示
属性:
椭圆形(或圆角矩形)表示
联系:
菱形表示
组织层数据模型
层次模型
网状模型
关系模型(用“二维表”来表示数据之间的联系)
基本概念:
关系(Relation):
一个关系对应通常说的一张表
元组(记录):
表中的一行
属性(字段):
表中的一列,给每一个属性名称即属性名
分量:
元组中的一个属性值,分量为最小单位,不可分
主码(Key):
表中的某个属性组,它可以唯一确定一个元组。
域(Domain):
属性的取值范围。
关系模式:
关系的描述。
一般表示:
关系名(属性1,属性2,⋯,属性n)
关系模型的数据完整性约束
体完整性
参照完整性
用定的完整性
DBS三级模式结构:
外模式、概念模式、内模式(一个数据只有一个内模式)
UNIT2
在进行数据库的操作时,会出现以下几方面的问题:
1.数据冗余;2.插入异常;3.除异常;4.更新异常好的关系模式避免以上
函数依赖
有关系模式R(A1,A2,⋯,An),X和Y均{A1,A2,⋯,An}的子集
如果X→Y,但Y不包含于X,称X→Y是非平凡的函数依。
如果X→Y,称X决定因子。
如果Y函数不依于X,作XY。
如果X→Y,并且Y→X,作X?
Y。
范式
从外到里依此增加
模式分解的准则:
模式分解具有无损连接性;模式分解能够保持函数依赖
规范化理论主要是研究关系中各属性之间的依赖关系,根据依赖关系的不同,我们
介绍了不包含子属性的第一范式,到消除了属性间的部分依赖关系的第二范式,
再到消除了属性间的传递依赖关系的第三范式,最后到每个决定因子都必须是候选
码的BCNF。
范式的每一次升级都是通过模式分解实现的,在进行模式分解时应注意保持分解后
的关系能够具有无损连接性并能保持原有的函数依赖关系。
对于一般的数据库应用来说,设计到第三范式就足够了。
因为规范化程度越高,分解
得越细
表的个数越多
则在检索操作时会因连接而降低检索效率。
例:
S-D-L(Sno,Dept,Loc)有函数依赖:
Sno
→
Dept
,
Dept
→
Loc
不是第三范式的。
至少可以有三种分解方案,分别为:
方案1:
S-L(Sno,Loc),D-L(Dept,Loc),将
S-D-L
分解投影得到
S-L
和D-L
关
系
方案2:
S-D(Sno,Dept),S-L(Sno,Loc)
方案3:
S-D(Sno,Dept),D-L(Dept,Loc)
UNIT3
Sql
功能
命令动词
数据定义
CREATEDROPALTER
数据查询
SELECT
数据操纵
INSERTUPDATEDELETE
数据控制
GRANTREVOKE
SQL的数据类型:
数值型;字符串型;日期时间类型;货币类型
数据定义功能
操作对象
创建语句
删除语句
修改语句
基本表
CREATETABLE
DROPTABLE
ALTERTABLE
索引
CREATEINDEX
DROPINDEX
ALTERDATABASE
建立表CREATETABLE
例1.SC表添加“修”列,此列的定:
XKLBchar(4)
ALTERTABLESCADDXKLBchar(4)NULL
例2.将新添加的XKLB的型改char(6)。
ALTERTABLESCALTERCOLUMNXKLBchar(6)
例3.除Course表的Period列
ALTERTABLECourseDROPCOLUMNPeriod
索引:
聚簇索引、非聚簇索引:
复合索引是将两个字段或多个字段合起来建立的索引,而独的字段允有重复的。
建立索引
格式:
create[unique][clustered]index索引名on表名
(<列名1>[asc|desc][,⋯])
unique:
用于指定表建唯一索引,即不允存在索引相同的两行。
clustered:
用于指定建的索引聚簇索引。
默是非聚簇索引。
asc升序,desc降序,默asc
例1:
学生表建立按学号升序索引
createindexstudent_snoonstudent(sno)
例2:
为选课表按学号升序和课程号降序建唯一索引
createuniqueindexSCIonsc(sno,cnodesc)
例3:
为学生表按系升序建立聚簇索引。
createclusteredindexTIonstudent(sdept)
删除索引
语句基本格式:
dropindex<
表名.索引名>
例4:
删除表SC的索引SCI。
dropindex
注:
索引名前一定要加:
表名
SELECT<目标列名序列>
--
需要哪些列
FROM<数据源>
--
来自于哪些表
[WHERE<检索条件表达式>]
--
根据什么条件查询
[GROUPBY<分组依据列>]
--
对查询结果进行分组
[HAVING<组提取条件>][ORDERBY<排序依
--
指定组的选择条件
据列>]
[ORDERBY<排序依据列>]
--
对查询结果进行排序
简单查询(单表查询)
例1.查询全体学生的学号与姓名
SELECTSno,SnameFROMStudent
比较大小
例8.查询所有年龄在20岁以下的学生的姓名及年龄。
SELECTSname,SageFROMStudentWHERESage<20
或:
SELECTSname,SageFROMStudentWHERENOTSage>=20
确定范围
BETWEEN⋯AND和NOTBETWEEN⋯AND
确定集合(IN)
IN是一个运算符,可以用来找属性属于指定集合的元
使用IN的格式:
列名[NOT]IN(常量1,常量2,⋯常量n)
IN的含:
当列中的与IN中的某个常量相等,果True,表明此符合
条件的;
NOTIN的含正好相反:
当列中的与某个常量相同,果False,表明此
不符合条件的;
例12.信息系、数学系和算机系学生的姓名和性。
SELECTSname,SsexFROMStudent
WHERESdeptIN('信息系','数学系','算机系')
此句等价于:
SELECTSname,SsexFROMStudent
WHERESdept=‘信息系’ORSdept=‘数学系’ORSdept=‘算机系’
字符匹配
LIKE用于找指定列名与匹配串常量匹配的元(模糊)
匹配串是一种特殊的字符串,它不包含普通字符,可以包括通配符。
通配符用于表示任意的字符或字符串。
_:
匹配任意一个字符;
%:
匹配0个或多个字符;
[]:
匹配[]中的任意一个字符;
[^]:
不匹配[]中的任意一个字符。
LIKE运算符的一般形式:
列名[NOT]LIKE<匹配串>
在LIKE运算符前也可以使用NOT运算符,表示果取反。
例14.姓‘’的学生的信息。
SELECT*FROMStudentWHERESnameLIKE‘%’
例15.学生表中姓‘’、姓‘李’和姓‘刘’的学生的情况。
SELECT*FROMStudentWHERESnameLIKE‘[李刘]%’
例16.名字中第2个字‘小’或‘大’字的学生的姓名和学号。
SELECTSname,SnoFROMStudentWHERESnameLIKE'_[小大]%'
例17.所有不姓“刘”的学生。
SELECTSnameFROMStudentWHERESnameNOTLIKE'刘%'
例18.从学生表中学号的最后一位不是2、3、5的学生情况。
SELECT*FROMStudentWHERESnoLIKE'%[^235]'
涉及空值的查询
判断取空的句格式:
列名ISNULL
判断取不空的句格式:
列名ISNOTNULL
例19.无考成的学生的学号和相的程号。
SELECTSno,CnoFROMSCWHEREGradeISNULL
不可写WHEREGrade=null
多重条件查询
在WHERE子句中可以使用运算符AND和OR来成多条件
用AND接的条件表示必全部足所有的条件的果才True
用OR接的条件表示只要足其中一个条件果即True
对查询结果进行排序
排序子句的格式:
ORDERBY<列名>[ASC|DESC][,⋯n]
ASC表示列行升序排序,DESC表示列行降序排序。
默升序排序。
使用计算函数汇总数据
例26.算9512101号学生的考成之和
SELECTSUM(Grade)FROMSCWHERESno='9512101'
对查询结果进行分组计算
一般形式:
GROUPBY<分依据列>[,⋯n][HAVING<提取条件>]
例28.每程的人数,列出程号和人数。
SELECTCnoas程号,COUNT(Sno)as人数
FROMSCGROUPBYCno
多表连接查询
1.内连接
内连接的格式为:
SELECT<属性或表达式列表>
FROM表1[INNER]JOIN表2ON<连接条件>
例32.查询每个学生及其修课的情况
SELECT*FROMStudentINNERJOINSCON=
外连接
外连接是只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条件。
ANSI方式的外连接的语法格式为:
FROM表1LEFT|RIGHT[OUTER]JOIN表2ON<连接条件>
例39.查询学生的修课情况,包括修了课程的学生和没有修课的学生。
SELECT,Sname,
Cno,GradeFROMStudent
LEFTOUTERJOINSC
ON=
也可以用右外连接实现:
SELECT,Sname,
Cno,GradeFROMSC
RIGHTOUTERJOINStudent
ON=
使用子查询进行基于集合的测试
例40.查询与“刘晨”在同一个系学习的学生。
SELECTSno,Sname,SdeptFROMStudent
WHERESdeptIN
(SELECTSdeptFROMStudent
WHERESname='刘晨')
使用子查询进行基于集合的测试
例41.成大于90分的学生的学号、姓名。
SELECTSno,SnameFROMStudent
WHERESnoIN(SELECTSnoFROMSCWHEREGrade>90)
使用子查询进行比较测试
通比运算符(=、<>、<、>、<=、<=),将一个表达式的与子返回的行比。
例43.修了‘c02’程且成高于此程的平均成的学生的学号和成。
SELECTSno,GradeFROMSC
WHERECno='c02'andGrade>(
SELECTAVG(Grade)fromSC
WHERECno='c02')
使用子查询进行存在性测试
例44.修了‘c01’号程的学生姓名。
SELECTSnameFROMStudent
WHEREEXISTS
(SELECT*FROMSC
WHERESno=ANDCno=‘c01')
数据更改功能
插入数据
INSERT句的格式:
INSERT[INTO]<表名>[(<列名表>)]VALUES(列表)
例1.将新生(9521105,冬,男,信息系,18)插入到Student表中。
INSERTINTOStudentVALUES(‘9521105’,‘冬’,'男',18,'信息系')
更新数据(UPDATE)
UPDATE句的法格式:
UPDATE<表名>SET<列名=表达式>[,⋯n][WHERE<更新条
件>]
例2.将‘9512101’学生的年改21。
UPDATEStudentSETSage=21WHERESno='9512101'
删除数据(DELETE)
DELETE语句的语法格式为:
DELETE[FROM]<表名>[WHERE<删除条件>]
例3.删除计算机系不及格学生的修课记录用子查询实现:
用多表连接实现:
DELETEFROMSC
DELETEFROMSC
WHEREGrade<60ANDSnoIN
FROMSCJOINStudentON=
(SELECTSnoFROMStude
WHERESdept=‘计算机系’ANDGrade<60
WHERESdept=‘计算机系’)
定义视图
CREATEVIEW<视图名>[(视图列名表)]AS子查询语句
例1.建立信息系学生的视图。
CREATEVIEWIS_Student
AS
SELECTSno,Sname,Sage
FROMStudentWHERESdept='信息系'
例4.定义一个反映学生出生年份的视图
CREATEVIEWBT_S(Sno,Sname,Sbirth)
AS
SELECTSno,Sname,2006-Sage
FROMStudent
删除视图
DROPVIEW<视图名>
视图可简化查询语句
例:
将信息系学生的视图中学号为9512102的学生姓名改为“刘呈”
UPDATEIS_StudentSETSname=‘刘呈’
WHERESno=‘9512102’
例:
在信息系学生的视图中找出年龄小于20岁的学生
SELECTSno,Sage
FROMIS_StudentWHERESage<20
Unit4
数据库设计的基本步骤
需求分析阶段(信息要求、处理要求、安全性与完整性要求)——概念结构设计阶段——逻
辑结构设计阶段——物理结构设计阶段——数据库实施阶段——数据库运行和维护阶段
DBMS常用存取方法:
索引方法,目前主要是B+树索引方法
聚簇(Cluster)方法
HASH方法
UNIT5
DBMS对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性
控制和数据库恢复。
完整性控制
数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数
据库造成无效操作。
关系模型的完整性包括实体完整性,参照完整性和用户定义完整性。
对于违反实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。
完整性约束条件的作用对象可以是表、元组和列。
并发控制
数据库的并发操作导致的数据库不一致性主要有以下四种:
丢失修改(LostUpdate):
当两个事务T1和T2读入同一数据做修改,并发执行时,T2把T1
或T1把T2的修改结果覆盖掉。
污读(DirtyRead):
事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于
某种原因被撤消,修改无效,数据R恢复原值。
事务T2得到的数据与数据库的内容不一致,
这种情况称为“污读”。
不可重读(UnrepeatableRead):
事务T1读取了数据后,事务T2更新了T1读取的数据,当
事务T1再读取数据以进行相同操作时,得到的两次值不一致,这种情况称为“不可重读”
产生“幽灵”数据:
指当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删
除了其中的部分记录,或者在其中添加了部分记录,则当T1再次按相同条件读取数据时,
发现其中莫名其妙地少了(对删除)或多了(对插入)一些记录。
这样的数据对T1来说就
是“幽灵”数据或称“幻影”数据。
并发控制的主要方式是封锁机制,即加锁(Locking)。
排它锁(ExclusiveLock,又称写锁,简称为X锁)-----事务T对数据对
象A加了X锁,则允许T读取和修改A,但不允许其它事务再对A加任何类型的锁,直到T释放了A上的锁。
共享锁(ShareLock,又称读锁,,简称为S锁)-----事务T对数据对象A
加了S锁,则事务T可以读A,但不能修改A,其它事务只能再对A加S锁,
而不能加X锁,直到T释放了A上的S锁。
三个封锁协议的主要区别在于
X锁(对写数据)
S锁(对只读数据)
不丢失修改
不读脏数
可重复读
(写)
据(读)
(读)
一级事务全程加锁不加√
二级事务全程加锁事务开始加,读完放√√
三级事务全程加锁事务全程加锁√√√
预防死锁
两种方法:
一次封锁法、顺序封锁法
数据库的恢复
数据库运行故障:
事务故障(可以利用日志文件撤消此事务对数据库已进行的修改)
系统故障
介质故障(重装数据库,然后利用备份或镜像设备恢复数据库。
)
UNIT6
使用Transact-SQL语言创建数据库
CREATEDATABASE数据名
[ON
[<文件格式>[,⋯n]]
]
[LOGON{<文件格式>[,⋯n]}]
例2:
建一个数据,数据名称:
“人事信息数据”,此数据包含一个数据文件和
一个事日志文件。
数据文件只有主数据文件,其文件名“人事信息数据”,其物
理文件名“人事信息数据
.mdf”,存放位置在默目下,其初始大小