HFUT_Yanx
UNIT1
四个基本概念
1?数据(Data):数据库中存储的基本对象
2?数据库的定义:数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大_量数据集合
3?数据库管理系统(简称DBMS):位于用户与操作系统之间的一层数据管理软件 (系统软件)<
用途:科学地组织和存储数据;高效地获取和维护数据
主要功能:数据定义功能;数据操纵功能;数据库的运行管理;数据库的建立和维护功能 (实用程序)
4?数据库系统(DatabaseSystem,简称DBS):指在计算机系统中引入数据库后的系统数据库系统的构成
数据库
数据库管理系统(及其开发工具)
应用系统
数据库管理员(DBA)和用户
数据管理技术的发展过程
人工管理阶段
文件系统阶段
数据库系统阶段
数据库系统管理数据的特点如下
(1)数据共享性高、冗余少;(2)数据结构化;(3)数据性高;(4)由DBMS进行统一的数据控制功能
数据模型
用来抽象、表示和处理现实世界中的数据和信息的工具。据的模拟。
数据模型三要素。
通俗地讲数据模型就是现实世界数
数据结构:是所研究的对象类型的集合,它是刻画一个数据模型性质最重要的方面 ;数据结
构是对系统静态特性的描述
数据操作:对数据库中数据允许执行的操作及有关的操作规则
;对数据库中数据的操作主要有
查询和更改(包括插入、修改、删除) ;数据操作是对系统动态特性的描述
数据的约束条件:数据及其联系应该满足的条件
E-R图
实体:矩形框表示
属性:椭圆形(或圆角矩形)表示
1
HFUT_Yanx
1
itl诫
成境讲授
ri
纵成 号唱祥名学廿
学号
联系:菱形表示 | 堆苦 | 选诣 | 名 |
性刖 | |||
入学 | |||
丿 |
组织层数据模型
层次模型
网状模型
关系模型(用“二维表”来表示数据之间的联系)
基本概念:
关系(Relation):—个关系对应通常说的一张表
元组(记录):表中的一行
属性(字段):表中的一列,给每一个属性名称即属性名分量:元组中的一个属性值,分量为最小单位,不可分
主码(Key):表中的某个属性组,它可以唯一确定一个元组。域(Domain):属性的取值范围。
关系模式:对关系的描述。一般表示为:关系模型的数据完整性约束
实体完整性 参照完整性
用户定义的完整性
关系名(属性1,属性2,…,属性n)
DBS三级模式结构:外模式、概念模式、内模式(一个数据库只有一个内模式) 数擱库系纟充的模式结构
2
HFUT_Yanx
UNIT2
在进行数据库的操作时,会出现以下几方面的问题:
1?数据冗余;2.插入异常;3.删除异常;4.更新异常
好的关系模式应避免以上问题
函数依赖
设有关系模式R(A1,A2,…,An),X和Y均为{A1,A2,…,An}的子集
如果心Y,但Y不包含于X,则称心Y是非平凡的函数依赖。
如果XY,则称X为决定因子。
如果Y函数不依赖于X,则记作XY。
如果XTY,并且JX,则记作X? Yo
范式
从外到里依此增加
模式分解的准则:
模式分解具有无损连接性;模式分解能够保持函数依赖
?规范化理论主要是研究关系中各属性之间的依赖关系,根据依赖关系的不同,我们介绍了不包含子属性 的第一范式,到消除了属性间的部分依赖关系的第二范式,
?再到消除了属性间的传递依赖关系的第三范式,最后到每个决定因子都必须是候选码的BCNF? 范式的每一次升级都是通过模式分解实现的,在进行模式分解时应注意保持分解后的关系能够具有无损 连接性并能保持原有的函数依赖关系。
?对于一般的数据库应用来说,设计到第三范式就足够了。因为规范化程度越高 ,分解 得越细,表的个数越多,则在检索操作时会因连接而降低检索效率。
例:SD-L(Sno,Dept,Loc)有函数依赖:
SnoTDept,DeptTLoc
不是第三范式的。至少可以有三种分解方案,分别为:
方案1:S-L(Sno,Loc),D-L(Dept,Loc),将S-D-L分解投影得到S-L和D丄关系
1届8 1叱S01 | I | 」小 | fj和5 |
| ||||||||||||||||
1皿 | s-i. | 1 JI II- r>-r |
| |||||||||||||||||
&2 —2 | ||||||||||||||||||||
结论:方宰[平满足无制门土按rt | ||||||||||||||||||||
方案2:S-D(Sno,Dept),S-L(Sno,Loc)
方案2: | D I一井解股th时A序DUls L K |
| ||||||||||||||
|
|
| ||||||||||||||
S-L | 竝一 3 | |||||||||||||||
如卑假晓学生303从QK病料到了LXA素"期需在表S-DCSO3,D2 J 改为CSO3,LKO ,M 时还需空在心I< S(XJ,L2>改
为Ll>-加果*.阴伞條改泌门问时血f.,则故
撤唐:中旗会IBJW屮皱佶尿c这尼由于这样分的曲怡关壊槓盘29:育條轉Mi*的函?iHW#*爻系址说的.自的函笑依Mtept-*L?在分解后f?在了两个黄枣植盘上.因此分解方漫右怩持原卡的函瞰依韓芷垂,也干斤奸旳分烟方氓"
纳论:方家2満足无拗连接忖,恒没“侏持惊疔的阴数依啊X2系 |
3
HFUT_Yanx
方案3:SD(Sno,Dept),D-L(Dept,Loc)
方秦3:将AD-L分解投影得到S-D和D-L关系
|
| 自然连接 |
| |||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||
S-D | D-I. | 表2—4 |
结论:方案3既满足无损连接性,又保持原有的函数依赖关系. 故它是一个 好的分解方法 |
UNIT3
Sql功能 | 命令动词 | |||
| ||||
SQL的数据类型:数值型;字符串型;日期时间类型;货币类型数据定义功能
操作对象 | 创建语句 | 删除语句 | 修改语句 |
基本表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
索引 | CREATE INDEX | DROP INDEX | |
视图 | CREATE VIEW | DROP VIEW | |
数据库 | CREATE | DROP | ALTER DATABASE |
4
HFUT_Yanx
建立表CREATE | TABLE |
| MA 敏f?虽卫 :了再肌 fcAJUn dtiiMta1 「字同■歩, Cc riid a L L<a .MO
| ||||||||||||||||||||||
CREATE TABLE Stcicfont ( | chair(2) CHECK {$i?x ■卜男.OR $I?K ■、匕卞 i linyinl CHECK (Sage >■ 1S |
AND Saga "45i 底hjliF fM |
CREATE TABLE CcHirse( |
4? chM刚 NOT NULL. |
Cm^me char(2D) NOT HULL, Ceredlri tlnyflrif |
CHECK (Ccredrt > SeimeBCer 釉血nt CHECK Se ne&Cei OJ, Porkxl Irn CHECK iPorlod > " i :丄呷严,j 亠 |
tfT*. It it 内 T
| 丄HL | |||
fig | |
CREATE WBLE SC ( 剥① ChaitTJ MOT NIULL, Cno ?h^r(lD|l NOT NULL, Gfa<ie tiny!nt, |
CHECK (Grade >= 0 and Grade<- 100), |
PRoWARY KEY ( Suv. Cm? h |
FOREIGN KEY (汕?REFERENCES Student t Sfl?). PORGIGN KEY ( C.no ) REFERENCES Cour^drCM F I | |
例1为SC表添加“修课类别”列,此列的定义为: | XKLB char(4) |
ALTER TABLE SCADD XKLB char(4) NULL
例2.将新添加的 XKLB的类型改为char(6)。
ALTER TABLE SCALTER COLUMN XKLB char(6)
例3.删除Course表的Period列
ALTER TABLE Course DROP COLUMN Period
索引:聚簇索引、非聚簇索引:
复合索引是将两个字段或多个字段组合起来建立的索引,而单独的字段允许有重复的值。 建立索引
格式: create [uniq ue] [clustered] | in dex | 索弓丨名 on 表名 |
(<列名1 >[asc | desc][,…]
unique :用于指定为表创建唯一索引,即不允许存在索引值相同的两行。 clustered :用于指定
创建的索引为聚簇索引。默认是非聚簇索引。
asc升序,desc降序,默认为 asc
例1为学生表建立按学号升序索引
create in dex stude nt_sno on stude nt(s no)
例2:为选课表按学号升序和课程号降序建唯一索引
create unique index SCI on sc(sno, eno desc)
例3:为学生表按系升序建立聚簇索引。
create clustered in dex TI on stude nt (sdept)
删除索引
语句基本格式:drop index <表名.索引名>例4 :删除表SC的索引SCI
drop in dex SC.SCI
注:索引名前一定要加:表名
5
HFUT_Yanx
SELECT目标列名序列> --需要哪些列
FROM<数据源> --来自于哪些表[WHERE<检索条件表达式>] --根据什么条件查询[GROUPBY分组依据列>] --对查询结果进行分组[HAVING<组提取条件>][ORDERBY<排序依据列 --指定组的选择条件>]
[ORDERBY排序依据列>] --对查询结果进行排序
简单查询(单表查询)
例1.查询全体学生的学号与姓名
SELECTSn,SnameFROM Student
比较大小
例&查询所有年龄在20岁以下的学生的姓名及年龄。
SELECTSn ame, Sage FROM Stude nt WHERE Sage <20或:SELECTSname, Sage FROM Student WHERE NOT Sage >=20 确定范围
BETWEEN…AND禾口NOTBETWEEN ? AND
确定集合(IN)
IN是一个逻辑运算符,可以用来查找属性值属于指定集合的元组使用IN的格式为:列名[NOT]IN (常量1,常量2,…常量n)
IN的含义为:当列中的值与 | IN中的某个常量值相等时,则结果为 | True,表明此记录为符合 |
查询条件的记录;
NOT IN的含义正好相反:当列中的值与某个常量值相同时,则结果为不符合查询条件的记录;
例12.查询信息系、数学系和计算机系学生的姓名和性别。
SELECT Sn ame, Ssex FROM Stude nt
False,表明此记录为
WHERE Sdept IN (信息系','数学系','计算机系')此句等价于:SELECT Sn ame, Ssex FROM Stude nt
WHERE Sdept ='信息系’OR Sdept ='数学系’ OR Sdept ='计算机系’
字符匹配
LIKE用于查找指定列名与匹配串常量匹配的元组(模糊查询) 匹配串是一种特殊的字符串,它不仅包含普通
字符,还可以包括通配符。 通配符用于表示任意的字符或字符串。
_:匹配任意一个字符;
% :匹配0个或多个字符;
[]:匹配[]中的任意一个字符;
F ]:不匹配[]中的任意一个字符。
LIKE运算符的一般形式为: 列名 [NOT ] LIKE <匹配串>在LIKE运算符前边也可以使用 NOT运算符,表
示对结果取反。
例14.查询姓’张’的学生的详细信息。
SELECT * FROM Student WHERE Sname LIKE'张 %'
例15.查询学生表中姓’张’、姓’李’和姓’刘’的学生的情况。
SELECT * FROM Student WHERE Sname LIKE'[张李^叮%'
例16.查询名字中第2个字为’小’或’大’字的学生的姓名和学号。
SELECT Sname, Sno FROM Student WHERE Sname LIKE小大]%'
6
HFUT_Yanx
例17?查询所有不姓“刘”的学生。
SELECTSn ame FROM Stude nt WHERE Sn ame NOT LIKE %'
例18?从学生表中查询学号的最后一位不是 2、3、5的学生情况。 SELECT* FROM Stude nt WHERE Sno LIKE '%[A235]'
涉及空值的查询
判断取值为空的语句格式为:列名ISNULL
判断取值不为空的语句格式为:列名 ISNOT NULL
例19?查询无考试成绩的学生的学号和相应的课程号。
SELECTSno, Cno FROM SC WHERE Grade IS NULL
不可写为 WHEREGrade = null
多重条件查询
在WHERE子句中可以使用逻辑运算符AND和OR来组成多条件查询用AND连接的条件表示必须全部满足
所有的条件的结果才为 | True | True |
用OR连接的条件表示只要满足其中一个条件结果即为 |
对查询结果进行排序
排序子句的格式为: ORDERBY列名>[ASC| DESC ][,…n]
ASC表示对列进行升序排序, DESC表示对列进行降序排序。默认为升序排序。
使用计算函数汇总数据
例26.计算9512101号学生的考试总成绩之和
SELECTSUM(Grade) FROM SC WHERE Sno = '9512101'
对查询结果进行分组计算
一般形式为:GROUPBY分组依据列>[,…n] [HAVING <组提取条件>]例28?统计每门课程的选课人数,列出课程号和人数。
SELECTCno as课程号,COUNT(Sno)as 选课人数
FROMSC GROUP BY Cno
多表连接查询
1?内连接
内连接的格式为:SELECT属性或表达式列表>
FROM表1 [INNER ] JOIN 表2ON <连接条件>
例32?查询每个学生及其修课的情况
SELECT* FROM Stude nt INNER JOIN SC ON Stude nt.S no = SC.S no
外连接
外连接是只一张表中的数据必须满足连接条件,ANSI方式的外连接的语法格式为:
而另一张表中数据可以不满足连接条件。
FROM 表 1 LEFT | RIGHT [OUTER] JOIN 表 2 ON <连接条件 >例39?查询学生的修课情况,包括修了课程的学生和没有修课的学生。
SELECT Stude nt.S no, Sn ame,
Cno, Grade FROM Stude nt
LEFT OUTER JOIN SC
ON Stude nt.S no = SC.S no
7
HFUT_Yanx
也可以用右外连接实现:
SELECTStude nt.S no, Sn ame,
Cno,Grade FROM SC
8
HFUT_Yanx
RIGHTOUTER JOIN Stude nt
ONStude nt.S no = SC.S no
使用子查询进行基于集合的测试例40.查询与“刘晨”在同一个系学习的学生。
SELECTSno, Sn ame, Sdept FROM Stude nt
WHERESdept IN
(SELECTSdept FROM Stude nt
WHERESn ame =刘晨')
使用子查询进行基于集合的测试例41.查询成绩为大于90分的学生的学号、姓名。
SELECTSno, Sn ame FROM Stude nt
WHERESno IN ( SELECT Sno FROM SWHERE Grade >90)
使用子查询进行比较测试
通过比较运算符(=、<>、<、>、<=、<=),将一个表达式的值与子查询返回的值进行比较。例43.查询修了’C02'课程且成绩高于此课程的平均成绩的学生的学号和成绩。
SELECTSno ,Grade FROM SC
WHERECno = 'c02' and Grade >(
SELECTAVG(Grade) from SC
WHERECno = 'c02')
使用子查询进行存在性测试例44.查询选修了’C01'号课程的学生姓名。
SELECTSn ame FROM Stude nt
WHEREEXISTS
(SELECT* FROM SC
WHERESno = Student.Sno AND Cno = 'c01')
数据更改功能
插入数据
INSERT语句的格式为:INSERT[INTO]表名>[(<列名表>)]VALUES(值列表)例1.将新生记录(9521105,陈冬,男,信息系,18岁)插入到Student表中。
INSERTINTO Student VALUES( 9521105','陈冬','男',18,'信息系')
更新数据(UPDATE)
UPDATE语句的语法格式为:UPDATE表名>SET列名=表达式>[,…n][WHERE <更新条件>]例2.将’9512101'学生的年龄改为21岁。
UPDATEStude nt SET Sage = 21 WHERE Sno = '9512101' 删除数据(DELETE)DELETE语句的语法格式为:DELETE[ FROM ]表名>[WHERE<删除条件>]
例3?删除计算机系不及格学生的修课记录用子查询
实现:用多表连接实现: DELETEFROM SC DELETE FROM SC
WHERE Grade < 60 AND Sno IN
FROMSC JOIN Student ON SC.Sno =
(SELECT Sno FROM Stude | ) | Stude nt.S no |
WHERE Sdept ='计算机系’AND Grade < 60 | ||
WHERE Sdept ='计算机系’ |
定义视图
9
HFUT_Yanx
CREATEVIEW视图名>[(视图列名表)]AS子查询语句例1建立信息系学生的视图。
CREATEVIEW IS_Stude nt
AS
SELECTSno, Sn ame, Sage
FROMStudent WHERE Sdept =信息系'
例4?定义一个反映学生出生年份的视图
CREATEVIEW BT_S(S no, Sn ame, Sbirth)
AS
SELECTSno, Sn ame, 2006Sage
FROMStude nt
删除视图
DROPVIEW <视图名>
视图可简化查询语句
例:将信息系学生的视图中学号为 9512102的学生姓名改为“刘呈UPDATEIS_Student SET Sname^U'呈'
WHERESno = '9512102'
例:在信息系学生的视图中找出年龄小于 20岁的学生
SELECTSno, Sage
FROMIS_Stude nt WHERE Sage <20
Unit4
数据库设计的基本步骤
需求分析阶段(信息要求、处理要求、安全性与完整性要求)一一概念结构设计阶段一一逻
辑结构设计阶段一一物理结构设计阶段一一数据库实施阶段一一数据库运行和维护阶段
DBMS常用存取方法:索引方法,目前主要是B+树索引方法
聚簇(Cluster)方法
HASH方法
UNIT5
DBMS对数据库的安全保护功能是通过四方面实现的,即安全T _______
控制和数据库恢复。
完整性控制
数据库的完整性是指保护数据库中数据的正确性、 | 有效性和相容性,防止错误的数据进入数 |
| |
据库造成无效操作。
关系模型的完整性包括实体完整性,参照完整性和用户定义完整性。
对于违反实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。
完整性约束条件的作用对象可以是表、元组和列。
并发控制
数据库的并发操作导致的数据库不一致性主要有以下四种:
丢失修改(LostUpdate ):当两个事务Ti和T2读入同一数据做修改,并发执行时, T2把Ti
或Ti把T2的修改结果覆盖掉。
10
HFUT_Yanx
污读(DirtyRead):事务Ti更新了数据R,事务T2读取了更新后的数据 R,事务Ti由于某
种原因被撤消,修改无效,数据这种情况称为污读”
R恢复原值。事务T2得到的数据与数据库的内容不一致,
不可重读(Un repeatable Read):事务Ti读取了数据后,事务 T2更新了 Ti读取的数据,当事 务Ti再读取数据
以进行相同操作时,得到的两次值不一致,这种情况称为 不可重读”
产生“幽灵”数据:指当事务Ti按一定条件从数据库中读取了某些数据记录后,事务 T2删
除了其中的部分记录,或者在其中添加了部分记录,则当 Ti再次按相同条件读取数据时,
发现其中莫名其妙地少了(对删除)或多了(对插入)一些记录。这样的数据对 Ti来说就
是 幽灵”数据或称 幻影”数据。
并发控制的主要方式是封锁机制,即加锁(Locking )。
? 排它锁(Exclusive Lock,又称写锁,简称为 X锁)-----事务T对数据对象 A 加了 X锁,则允许
T读取和修改A,但不允许其它事务再对 A加任何类型的 锁,直到T释放了 A上的锁。
? 共享锁(Share Lock,又称读锁,简称为S锁)-----事务T对数据对象A加了 S锁,则事务T可以读
A,但不能修改 A,其它事务只能再对 A加S锁,而 不能加X锁,直到T释放了 A上的S锁。
三个封锁协议的主要区别在于
| X锁(对写数据) | S锁(对只读数据) | 不丢失修改 (写) | 不读脏数据(读) | 可重复读(读) |
一级 | 事务全程加锁 | 不加 | V | | |
二级 | 事务全程加锁 | 事务开始加,读完放 | V | V | |
三级 | 事务全程加锁 | 事务全程加锁 | V | V | V |
预防死锁
两种方法:一次封锁法、顺序封锁法
数据库的恢复
数据库运行故障:事务故障(可以利用日志文件撤消此事务对数据库已进行的修改)
系统故障
介质故障(重装数据库,然后利用备份或镜像设备恢复数据库。 )
UNIT 6
使用Transact-SQL语言创建数据库
CREATE DATABAS数 据库名
[ON
[ <文件格式 > [,…n ]]
]
[LOG ON { <文件格式 > [,…n ] }]
例2:创建一个数据库,数据库名称为: “人事信息数据库”,此数据库包含一个数据文件和
一个事务日志文件。数据文件只有主数据文件,其逻辑文件名为“人事信息数据库” ,其物
理文件名为“人事信息数据库.mdf”,存放位置在默认目录下, 其初始大小为iOMB,最大大
小为30MB,自动增长时的递增量为 5MB。事务日志文件的逻辑文件名为 “人事信息日志”,
物理文件名为“人事信息日志 」df ”,也存放在默认目录下,初始大小为 3MB,最大大小为
11
HFUT_Yanx
12MB,自动增长时的递增量为 2MB。
CREATEDATABASE人事信息数据库
ON
(NAME=人事信息数据库,
人事信息数据库.mdf',
SIZE= 10,
MAXSIZE= 30,
FILEGROWTH= 5 )
LOGON
(NAME=人事信息日志,
人事信息日志.ldf',
SIZE= 3,
MAXSIZE= 12,
FILEGROWTH= 2 )
使用Transact-SQL语句删除数据库
语法格式为:DROPDATABASES据库名[,…n]
例:用SQL语句删除Test1和Test2数据库:
DROPDATABASE Test1, Test2
使用Transact-SQL语句修改数据库(ALTERDATABASE)
仓U建触发器(CREATETRIGGER)
使用SQL语句管理权限
(1)授权语句GRANT
例1:为用户user1授予Student表的查询权。
GRANTSELECT ON Stude nt TO user1
例2:为用户user1授予SC表的查询权和插入权。
GRANTSELECT INSERT ON SC TO user1
例3:授予user1和user2具有创建数据库表和视图的权限。
GRANTCREATE TABLE, CREATE VIEW TO user1, user2
(2)收回权限语句REVOKE
例1:收回用户user1授予Student表的查询权。
REVOKESELECT ON Stude nt FROM user1
例2:收回授予user1创建数据库表的权限。
REVOKECREATE TABLE FROM user1
(3)拒绝权限语句DENY
例1:拒绝用户user1对Student表的修改权。
DENYUPDATE ON Stude nt TO user1
例2:拒绝user1创建视图的权限。
DENYCREATE VIEW TO user1
使用Transact-SQL的备份语句进行备份
12
HFUT_Yanx
?(1)备份数据库的语句格式为:
BACKUPDATABASES据库名TO{ <备份设备名>} | { DISK | TAPE } = {物理备份文件名’}[WITH [ DIFFERENTIAL ][ [ , ] { INIT | NOINIT }]]
?(2)备份数据库日志的语句格式为:
BACKUPLOG数据库名 TO{ <备份设备名>} | { DISK | TAPE } = {物理备份文件名’}
[WITH[{ INIT | NOINIT } ][ { [ , ] NO_LOG | TRUNCATE_ONLY | NO_TRUNCATE }]]
例1对学生管理数据库进行完全备份,并备份到创建好)。
MyBK_1备份设备上(假设此备份设备已
BACKUP DATABASES 生管理数据库 TO MyBK_1
例2 ?对学生管理数据库进行完全备份,并覆盖掉备份设备上已有的内容 BACKUP DATABASES 生管理数据库 TO MyBK_1 WITH INIT
例3. | 对学生管理数据库进行事务日志备份,并备份到 | MyBKLog1备份设备上。 |
BACKUP LOG 学生管理数据库 TO MyBKLog1
? DIFFERENTIAL表示进行差异备份;
? INIT :表示本次备份数据库将重写备份设备,即覆盖掉本设备上以前进行的所有备
份;
? NOINIT:表示本次备份数据库将追加到备份设备上,即不覆盖掉本设备上以前进行
的所有备份;
使用Transact-SQL语句实现恢复
例1 ?假设已对学生管理数据库进行了完全备份,并备份到 MyBK_1备份设备上,假设此备
份设备只含有对学生管理数据库的完全备份。则恢复学生管理数据库的备份的语句为:RESTORE DATABAS学 生管理数据库 FROM MyBK_1
13
Copyright © 2019- jusc.cn 版权所有
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务