数据库原理及应用教程Word文档下载推荐.docx
《数据库原理及应用教程Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库原理及应用教程Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
(1)关系。
一个关系对应一张二维表。
(2)元组。
二维表中的一行。
(3)属性。
二维表格中的一列,给每一个属性起一个名称即属性名,属性由名称、类型、长度构成其特征。
(4)域。
属性的取值范围,如年龄的域是14~40,性别的域是男,女。
(5)分量。
每一行对应的列的属性值,即为元组中的一个属性值。
(6)关键字。
可唯一标识一个元组的属性或属性集,也称为关系键或主码。
(7)关系模式。
关系模式是对关系的描述,一般表示为:
关系名(属性1,属性2,…,属性n),关系模式是关系模型的“型”,是关系的框架结构。
如,学生关系S的关系模式可表示为:
学生(学号,姓名,性别,年龄,系别)。
17.数据库技术的研究领域:
⑴数据库管理系统软件的研制⑵数据库设计⑶数据库理论
18.笛卡尔积的运算:
给定一组域D1,D2,…,Dn(它们可以包含相同的元素,即可以完全不同,也可以部分或全部相同)。
D1,D2,…,Dn的笛卡尔积为:
D1×
D2×
……×
Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
每一个元素(d1,d2,…,dn)中的每一个值di叫做一个分量(Component),di∈Di
每一个元素(d1,d2,…,dn)叫做一个n元组(n-Tuple),简称元组(Tuple)
笛卡尔积D1×
…×
Dn的基数M(即元素(d1,d2,…,dn)的个数)为所有域的基数的累乘之积,即M=
域是一组具有相同数据类型的值的集合,又称为值域
域中所包含的值的个数称为域的基数(用m表示)。
例如:
D1={李力,王平,刘伟},m1=3;
D2={男,女};
m2=2;
D3={18,20,18};
m3=3。
例如,上述表示教师关系中姓名、性别两个域的笛卡尔积为:
D1×
D2={(李力,男),(李力,女),(王平,男),(王平,女),(刘伟,男),(刘伟,女)}
分量:
李力、王平、刘伟、男、女
元组:
(李力,男),(李力,女)等,M=m1×
m2=3×
2=6
笛卡尔积可用二维表的形式表示:
笛卡尔积实际是一个二维表
姓名
性别
李力
男
女
王平
刘伟
一行即为一个元组,一列即为同一个域
19.关系模式的书写格式(知道怎么写):
R(U,D,DOM,F),其中,R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性剑数据的依赖关系集合。
如:
学生(学号,姓名,性别,年龄,系别)
20.关系的键:
外部键、候选键、主键
(1)候选键:
能唯一标识关系中元祖的一个属性或属性集,称为候选键。
(2)主键:
如果一个关系中有多个候选键,可以从中选择一个作为查询、插入或删除元祖的操作变量,被选用的候选键称为主关系键,或称为主键。
(3)外部关系键:
21.关系的完整性:
实体完整性:
参照完整性;
用户自定义完整性;
域的完整性。
22.关系代数运算的类型:
(1)传统的集合运算(选择):
并、差、交和广义笛卡尔积运算(会算P44)。
(2)专门的关系运算:
选取、投影、连接和除法运算。
(P55)
连接
23.基本表:
一个关系对应一个基本表。
基本表是独立存在的表,不是由其他的表导出的表。
24.视图:
视图是从一个或几个基本表导出的表,是一个虚拟的表。
如何创建视图的语句P124
25.在SQLServer200中,创造一个数据库将至少产生两个文件,即数据文件和日志文件。
一个数据库至少应该包含一个数据文件和一个事物日志文件。
一个数据库只能有一个主要数据文件,可以有多个次要数据文件。
26.常用的数据类型:
整型、字符型、日期型、带小数点型的英文怎么写(P88)
27.定义数据表的约束(全看P91)
(1)NULL/NOTNULL约束;
(2)UNIQUE约束(唯一约束);
(3)PRIMARYKEY(主键约束);
(4)FOREIGNKEY(外键约束);
(5)CHECK约束;
(6)Default默认。
28.SQL创建的完整性约束有哪些?
(P194)
29.索引的作用(为什么要创建索引?
)
(1)加快查询速度;
(2)保证行的唯一性。
30.索引的分类:
按照索引记录的存放位置,索引可分为聚集索引与非聚集索引。
聚集索引与非聚集索引的区别:
聚集索引按照索引的字段排列,并且按照牌号的顺序将记录存储在表中。
非聚集索引按照索引的字段排列记录,但是排列的结果并不会存储在表中,而是存储在另外的位置。
综上,在检索记录时,聚集索引会比非聚集索引的速度快,因为数据在表中已经依索引顺序牌号了,但要新增或更新记录时,由于聚集索引需要将排序后的记录存储在表中,所以其速度会比非聚集索引稍慢。
(一个表只能有一个聚集索引,而非聚集索引可以有多个)
31.数据查询(全看P105)
32.数据操纵:
(插入、修改、删除,语句格式P121)
33.系统权限与角色的授予:
GRANT;
系统权限与角色的收回:
REVOKE
34.在进行数据库的操作时,会出现以下几方面的问题:
(1)数据冗余;
(2)插入异常;
(3)删除异常;
(4)更新异常。
35.第一范式的定义:
如果关系模式R所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R∈1NF。
第二范式的定义:
如果关系模式R∈1NF,且每个非主属性都完全函数依赖于R的主关系键,则称R属于第二范式。
第三范式的定义:
如果关系模式R∈2NF,且每个非主属性都不传递函数依赖于R的主关系键,则称R属于第三范式。
36.要懂得如何将不规范的表规范到第三范式(P157)
37.关系模式规范化的步骤:
(1)对1NF关系进行投影,消除原关系中非主属性对键的部分函数依赖,将1NF关系转换成若干个2NF关系。
(2)对2NF关系进行投影,消除原关系中非主属性对键的传递函数依赖,将2NF关系转换成若干个3NF。
38.DBMS对数据库的安全保护功能:
安全性控制、完整性控制、并发性控制和数据库恢复。
39.安全性控制的一般方法:
(1)用户标识和鉴定;
(2)用户存取权限控制;
(3)定义视图;
(4)数据加密;
(5)审计。
40.在服务端,SQLServer2000的两种身份验证模式:
Windows身份验证模式和混合身份验证模式
在客户端,登录有两种方式:
使用Windows身份验证,使用SQLServer身份验证
注:
要同时拥有登录服务器的登录账号和使用数据库的用户帐号才能访问其中某一数据库
41.事务的定义:
事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。
42.事务的特征:
(1)原子性;
(2)一致性;
(3)隔离性;
(4)持久性。
43.定义事务的SQL语句:
BEGINTRANSACTION;
COMMIT;
ROLLBACK
44.数据库的并发操作导致的数据库不一致性有三种(选择P205):
(1)丢失更新;
(2)污读;
(3)不可重读。
45.实现并发控制的方法主要有两种:
封锁技术和时标技术。
封锁的类型:
排它型封锁和共享型封锁。
排它型封锁又称写封锁,简称为X封锁。
原理:
禁止并发操作。
当事T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。
这就保证了其他事务在T释放R上的封锁之前,不能再对R进行操作。
共享型封锁又称读封锁,简称为S锁。
允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。
当事务T对某个数据对象R实现S封锁后,其他事务职能对R加S锁,而不能加X锁,直到释放R上的S锁。
这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。
46.绘制E-R图,转换成逻辑模型(写出关系的主键、外键、参照哪张表的主键P219)
47.数据库设计的步骤:
(1)系统需求分析阶段;
(2)概念结构设计阶段;
(3)逻辑结构设计阶段;
(4)物理结构设计阶段;
(5)数据库实施阶段;
(6)数据库运行与维护阶段。
48.E-R图的冲突有三种(理解P235):
属性冲突、命名冲突和结构冲突。
49.Transact-SQL程序的批处理:
●在Transact-SQL程序内两个“GO”标记符之间的代码称为一个“批”。
●SQLServer对Transact-SQL程序的编译和执行是按照“批”为单位来进行的,称为批处理。
●一个Transact-SQL程序内可以包含多个“批”。
例以下程序是打开教学管理数据库TEACH,并从数据表SC中读取学号为“S1”同学所学课程的平均分,如果该平均分大于或等于60分,则程序输出“课程平均成绩超过60”,否则输出“课程平均成绩不超过60”。
/*Transact-SQL程序的实例*/
USETeach/*将教学管理数据库Teach置为当前数据库*/
GO
DECLARE@AvgScoreDECIMAL/*定义变量AvgScore*/
SET@AvgScore=60/*给变量AvgScore赋值初值*/
IF(SELECTAVG(Score)FROMSCWHERESNo='
S1'
)>
=@AvgScore
--输出结果
PRINT'
课程平均成绩超过'
+CONVERT(VARCHAR(10),@AvgScore)
ELSE
课程平均成绩不超过'
--执行批处理
50.局部变量(怎么定义、怎么赋值)
(局部变量必须以@开头,而且必须用DECLARE命令说明后才可使用且在Transact-SQL中必须使用SELECT或SET命令来设定变量的值)
DECLARE@变量名变量类型[,@变量名变量类型……]
SELECT@局部变量=变量值
或
SET@局部变量=变量值
[例7-1]声明一个长度为8个字符的变量id,并赋值。
DECLARE@idchar(8)
SELECT@id='
10010001
[例7-2]查询学号为“S7”的学生的学号和姓名,并存储到变量@sno和@sn中。
DECLARE@snovarchar(10)
DECLARE@snvarchar(10)
SELECT@sno=SNO,@sn=SNFROMSWHERESNO=’S7’
SELECT一次可对多个变量赋值,而SET一次只能对一个变量赋值
51.流程控制命令:
(P253看例子)
(1)BEGIN
<
命令行或程序块>
END
(2)IF<
条件表达式>
[ELSE
]
(3)IF[NOT]EXISTS(SELECT子查询)
(4)CASE<
表达式>
WHEN<
THEN<
…
[ELSE<
]
END
(5)WHILE<
BEGIN
<
[BREAK]
[CONTINUE]
[命令行或程序块]
52.常用命令:
(1)DECLARE的语法格式如下:
DECLARE{{@local_variabledata_type}
|{@cursor_variable_nameCURSOR}
|{table_type_definition}
}[,...n]
DECLARE命令用于声明一个或多个局部变量、游标变量或表变量。
例:
DECLARE@xCHAR,@yCHAR(10)
SELECT@x='
123'
@y='
data_type'
PRINT@x
PRINT@y
(2)EXECUTE命令用来执行存储过程。
(3)PRINT的语法格式如下:
PRINT'
anyASCIItext'
|@local_variable|@@FUNCTION|string_expression
PRINT命令向客户端返回一个用户自定义的信息,即显示一个字符串、局部变量或全局变量。
(4)RAISERROR用于在SQLServer系统返回错误信息时,同时返回用户指定的信息。
(5)SELECT命令可用于给变量赋值,其语法格式如下:
SELECT{@local_variable=expression}[,...n]
SELECT命令可以一次给多个变量赋值。
(6)SET命令有两种用法
1)用于给局部变量赋值。
2)用于用户执行SQL命令时,SQLServer处理选项的设定。
SET:
选项ON;
选项OFF;
选项值。
(7)USE{database}USE命令用于改变当前使用的数据库为指定的数据库。
53.常用函数:
(SUM,AVG,MAX,MIN,P261)
日期函数
(1)DAY(<
date_expression>
DAY函数返回date_expression中的日期值。
(2)MONTH(<
MONTH函数返回date_expression中的月份值。
(3)YEAR(<
YEAR函数返回date_expression中的年份值。
(4)DATEADD(<
datepart>
number>
date>
DATEADD函数返回指定日期date加上指定的额外日期间隔number产生的新日期。
54.存储过程(例子)
1.创建存储过程
(1)使用CREATEPROCEDURE语句创建存储过程
CREATEPROCEDURE语句的语法格式为:
CREATEPROC[EDURE]procedure_name[;
number]
[{@parameterdata_type}
[VARYING][=default][OUTPUT]
][,…n]
[WITH
{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
ASsql_statement[…n]
创建存储过程时应该注意下面几点:
●存储过程的最大大小为128MB。
●只能在当前数据库中创建(临时过程除外)。
●在单个批处理中,CREATEPROCEDURE语句不能与其他Transact-SQL语句组合使用。
●存储过程可以嵌套使用,在一个存储过程中可以调用其他的存储过程。
嵌套的最大深度不能超过32层。
●存储过程如果创建了临时表,则该临时表只能用于该存储过程,而且当存储过程执行完毕后,临时表自动被删除。
●创建存储过程时,“sq_statement”不能包含下面的Transact-SQL语句,即SETSHOWPLAN_TEXT、SETSHOWMAN_ALL、CREATEVIEW、CREATEDEFAULT、CREATERULE、CREATEPROCEDURE和CREATETRIGGER。
(2)执行存储过程使用EXECUTE语句,其完整语法格式如下:
[EXEC[UTE]]
[@return_status=]
{procedure_name[;
number]|@procedure_name_var}
[[@parameter=]{value|@variable[OUTPUT]|[DEFAULT]}]
[,…n]
[WITHRECOMPILE]
2.使用参数
例:
编写一个存储过程能根据用户提供WPH(物品号)、CKS(出库数)进行出库处理,KCB(WPHCHAR(3)NOTNULL,KCSINT)是库存表,RCKMXB(WPHCHAR(3)NOTNULL,RKSINT,CKSINT,RQDATETIME)是入出库明细表。
CREATEPROCEDUREUSP_CKCL
@WPHCHAR(3),@CKSINT
AS
IF@CKS<
=(SELECTKCSFROMKCBWHEREWPH=@WPH)
BEGIN
BEGINTRANSACTION
UPDATEKCBSETKCS=KCS-@CKSWHEREWPH=@WPH
INSERTRCKMXBVALUES(@WPH,0,@CKS,GETDATE())
COMMIT
END
RAISERROR('
库存数不足!
'
16,1)
在调用存储过程时,有两种传递参数的方法:
●第一种是在传递参数时,使传递的参数和定义时的参数顺序一致,对于使用默认值的参数可以用DEFAULT代替。
●另外一种传递参数的方法是采用“参数=值”的形式,此时,各个参数的顺序可以任意排列。
USEtest
EXECUSP_CKCL@WPH=‘01002’,@CKS=135
3.使用默认参数
创建存储过程时,可以为参数提供一个默认值,默认值必须为常量或者NULL。
编写一个存储过程能根据用户提供WPH(物品号)、RKS(入库数)进行入库处理,KCB(WPHCHAR(3)NOTNULL,KCSINT)是库存表,RCKMXB(WPHCHAR(3)NOTNULL,RKSINT,CKSINT,RQDATETIME)是入出库明细表。
CREATEPROCEDUREUSP_RKCL
@WPHCHAR(3),@RKSINT=500
BEGINTRANSACTION
IFEXISTS(SELECT*FROMKCBWHEREWPH=@WPH)
UPDATEKCBSETKCS=KCS+@RKSWHEREWPH=@WPH
INSERTINTOKCBVALUES(@WPH,@RKS)
INSERTINTORCKMXBVALUES(@WPH,@RKS,0,GETDATE())
COMMIT
EXECUSP_RKCL‘01003’
EXECUSP_RKCL‘01003’,150
4.使用返回参数
在创建存储过程时,可以定义返回参数。
在执行存储过程时,可以将结果返回给返回参数。
返回参数应用OUTPUT进行说明。
创建一个存储过程用于返回某个学生的姓名和总分。
USETEST
CREATEPROCUSP_S_SUM@SNOCHAR(5),@SNAMECHAR(8)OUTPUT,@S_SUMINTOUTPUT
AS
SELECT@SNAME=SNAME,@S_SUM=SUM(DEGREE)
FROMSTUDENT,SCORE
WHERESTUDENT.SNO=SCORE.SNOANDSNO=@SNO
执行该存储过程来查询学号为“06156”的学生姓名和总分。
DECLARE@SNAMECHAR(8),@S_SUMINT
EXECUSP_S_SUM‘06156’,@SNAMEOUTPUT,@S_SUMOUTPUT
SELECT‘姓名’=@SNAME,‘总分’=@S_SUM
5.存储过程的返回值
存储过程在执行后都会返回一个整型值。
如果执行成功,则返回0;
否则返回-1~-99之间的数值。
也可以使用RETURN语句来指定一个返回值。
CREATEPROCtest_int@input_intint=0
IF@input_int=0
RETURN0
IF@input_int>
RETURN1000
IF@input_int<
RETURN-1000
DECLARE@ret_intint
EXEC@ret_int=test_ret1
PEINT@ret_int
6.存储过程的查看、修改和删除
不再需要存储过程时可将其删除:
●这可以通过企业管理器来完成,在要删除的存储过程中右击鼠标,然后执行“删除”命令,在弹出的对话框中单击“全部除去”按钮即可。
●也可以通过DROPPROCEDURE语句来完成。
实验
1.显示所有职工的年龄。
selectworker.姓名,year(getdate())-year(csrq)asnlfromworker
2.求出各部门的党员人数。
selectdept.部门号,dept.部门名,count(*)as党员人数fromworker,deptwhereworker.部门号=dept.部门号andworker.党员否=’1’g