数据库原理重要知识点.docx
《数据库原理重要知识点.docx》由会员分享,可在线阅读,更多相关《数据库原理重要知识点.docx(72页珍藏版)》请在冰豆网上搜索。
数据库原理重要知识点
一.数据库系统概述
1.数据库系统的模式结构
(1).三级模式结构:
外模式(子模式,用户模式)——对应于视图和基本表
模式(逻辑模式,概念模式)——基本表
内模式(存储模式)——存储文件
A.模式:
①数据库中全体数据逻辑结构和特征的描述,处于中间层。
②一个数据库只有一个模式,是数据库的整体逻辑。
③整个数据库的实际存储的抽象表示。
B.外模式:
①位于最外层。
②一般是模式的子集,一个数据库可以有多个外模式
③概念模式的某一部分的抽象表示。
C.内模式:
①最内内层。
一个数据库只能有一个内模式。
②是数据库的实际存储表示。
二.关系数据库
三.关系数据库的标准语言——SQL
㈠.基本了解
1.视图:
是从一个或几个基本表导出的的表是一个虚拟表。
2.数据文件:
存放数据库数据和对象的文件。
①主数据文件:
扩展名为“.mdf”。
②次要数据文件:
扩展名为“.ndf”。
3.事务日志文件:
记录数据库更新情况的文件,扩展名为“.ldf”。
4.文件组:
将多个数据文件集合起来形成的一个整体,每个文件组有一个组名。
日志文件不分组,它不属于任何文件组。
㈡.创建数据库
1.格式:
createdatabasedatabase_name
on[primary](指明数据文件或主文件组)
(
name=logical_file_name,
filename='os_file_name',('D:
/logical_file_name.mdf')
size=size,
maxsize=maxsize,
filegrowth=growth_increment
)
filegroupfilegroup_name
(
name=logical_filename,
filename='os_file_name',
size=size,
maxsiaze=maxsize,
filegrowth=growth_increment
)
logon(指明事务日志文件)
collatecollate_name(指明数据库使用的校验方式)
forload/forattach
2.修改数据库:
alterdatabasedatabase_name
(1).addfile
(
name=logical_file_name,
newname=new_logical_name,
filename='os_file_name',
size=size,
maxsize=maxsize,
filegrowth=growth_increment
)
[tofilegroupfilegroup_name]
(2).removefilelogical_file_name
(3).addfilegroupfilegroup_name
(4).removefilegroupfilegrouo_name
(5).modifyfile
(6).modifyname=new_dbname
(7).collatecollation_name(更改排序规则)
Chinese_PRC_:
对中国大陆地区简体字unicode的排序规则
①._BIN:
二进制排序。
②._CI(CS):
是否区分大小写,CI不区分,CS区分。
③._AI(AS):
是否区分重音,AI不区分,AS区分。
④._KI(KS):
是否区分假名类型,KI不区分,KS区分。
⑤._WI(WS):
是否区分宽度,WI不区分,WS区分。
3.删除数据库:
dropdatabasedatabase_name
4.用系统存储过程查看数据库信息:
(1).显示数据库结构:
Sp_helpdb[[@dbname=]'name']
例:
execSp_helpdbNorthwind
(2).显示文件信息:
Sp_helpfile[[@filename=]'name']
例:
execSp_helpfileorders
(3).显示文件组信息:
Sp_helpfilegroup[[@filegroupname=]'name']
例:
useNorthwind
execSp_helpfilegroup
㈢.创建与使用数据表
1.数据类型:
(1).精确数值类型:
numeric,decimal
例:
numeric(P,[S])——numeric(8,3)
P代表精度,S表示小数位数
(2).近似浮点数类型:
float,real.例:
1.21E+10
(3).日期时间类型:
datetime,smalldatetime
例:
1998-06-0815:
30:
00
(4).货币类型:
money,smallmoney
(5).sql_variant数据类型可以存储除文本,图形数据和timestamp类型数据以外的其它任何合法的SQLServer数据。
(6).table数据类型用于存储对表或视图处理后的结果集。
2.创建数据表:
createtable<表名>(
<列名><数据类型>[default][列约束])
创建临时表:
Createtable#table_name
(
<列名><数据类型>[default][列约束]
)
3.定义数据表的约束
(1).数据库完整性机制:
约束,默认(default),规则(rule),触发器(trigger),存储过程(procedure)。
(2).完整性约束的基本语法格式:
[constraint<约束名>]<约束类型>
(3).五种类型的完整性约束:
①.null/notnull
格式:
[constraint<约束名>][null|notnull]
②.unique约束(唯一约束):
指明基本表在某一列或多个列的组合上的取值必须唯一。
系统自动为唯一键建立唯一索引,唯一键允许为空,为保证系统的唯一性,最多只可出现一个null值。
格式:
A.列约束:
[constraint<约束名>]unique
B.表约束:
[constraint<约束名>]unique(列名···)
③.primarykey(主键约束):
定义基本表的主键,起唯一标识作用,其值不能为null,也不能重复。
通过建立唯一索引来保证基本表在主键列取值的唯一性。
与unique约束的区别:
a.在一个基本表中只能定义一个primarykey约束,但可以定义多个unique约束。
b.对于指定的primarykey的一个列或多个列的组合,其中任何一个列都不能出现null值,而对于unique所约束的唯一键。
则允许null值。
c.不能为同一个列或一组列既定义unique约束,又定义primarykey约束。
格式:
定义列约束:
[constraint<约束名>]primarykey
定义表约束:
即将某些列的组合定义为主键。
[constraint<约束名>]primarykey(<列名>···)
④.foreignkey(外键约束):
指定某一个列或一组列作为外部键。
A.从表:
包含外部键的表。
B.主表:
包含外部键所引用的主键或唯一键的表称为主表。
C.系统保证从表在外部键上的取值是主表中某一个主键值或唯一键值,或者取空值,以保证两表之间的连接,确保了实体的参照完整性。
格式:
[constraint<约束名>]foreignkeyreferences<主表名>(<列名>···)
⑤.check约束:
用来检查字段值所允许的范围,以此保证域的完整性。
格式:
[constraint<约束名>]check(<条件>)
例:
建立一张包含完整性定义的学生表S。
createtableS
(
SNochar(6)constraintS_Primprimarykey,
SNchar(20)constraintSN_Consnotnull,
Sexchar
(2)constraintSex_Consnotnulldefault'男',
AgeintconstraintAge_ConsnotnullconstraintAge_Chkcheck(Agebetween15and50),
Deptchar(10)constraintDept_Consnotnull
)
(4).删除约束
格式:
Altertabletable_name
Dropconstraintconstraint_name
(5).修改约束
格式:
Altertabletable_name
①Add[constraint]<约束名><约束类型>[clustered][<列名>[排序方式]]
②Altercolumn<列名><数据类型><约束类型>
③Dropconstraint<约束名>
(6).禁止使用约束:
就是禁止使用在现有数据上的约束检查。
①当向表中添加约束时,也可以禁用对现有数据的约束检查。
例:
创建如下约束就可以实现禁用检查约束
AltertableScore
Withnocheck
AddconstraintCK_final112check((final>=0andfinal<=100))
go
②在加载新数据时禁用约束检查。
可以禁用在现有的check和foreignkey约束上的约束检查。
以下情况禁止使用约束检查:
①已经确定数据与约束一致。
②想载入与约束不一致的数据,载入后可以执行查询来改变数据,然后使约束重新有效。
4.规则:
一种数据库对象,属于逐步取消的数据库完整性手段。
(1).创建规则:
格式:
Createrulerule_name
Ascondition_expression(定义规则条件)
例:
Createrulescore_rule
As
@scorebetween0and100
(2).绑定规则:
格式:
sp_bindrule[@rulename=]'rule',创建了的规则名称
[@objname=]'object_name'绑定了规则的列或自定义
[,[@futureonly=]'futureonly_flag']仅将规则绑定到自定义时才使用
例:
将score_rule规则绑定到score表的usually列上。
Execsp_bindrule'score_rule','score.usually'
(3).解除列上绑定的规则:
格式:
Sp_unbindrule[@objname=]'object_name'要解除的规则
[,[futureonly=]'futureonly_flag']仅用于解除自定义
例:
解除绑定到score表的usually的规则。
Execsp_unbindrule'score.usually'
(4).删除规则:
格式:
Droprulerule_name
5.默认值:
是一种数据库对象,属于逐步取消的数据的完整性手段。
(1).创建默认值createdefault:
格式:
Createdefaultdefault_name
Asconstant_expression只包含常量表达式
例:
Createdefaulttype_default
As'必修'
(2).利用存储过程(sp_bindefault)绑定默认值:
格式:
Sp_bindefault[@defname=]'default'
[@objname=]'object_name'
[,[@futureonly=]'futureonly_flag']
例:
将type_default默认值绑定到course表的type列上
Execsp_bindefault'type_default','course.type'
(3).解除默认值对象的绑定:
格式:
Sp_unbindefault[@objname=]'object_name'
[,[futureony=]'futureonly_flag']
例:
Execsp_unbindefault'course.type'
(4).删除默认值对象:
格式:
Dropdefaultdefault_name
(4).修改数据表
1.三种修改方式:
(1).add方式:
用于增加新列和完整性约束。
格式:
Altertabletable_name
Add<列定义>|<完整性约束定义>
注意:
使用此方式增加的新列自动填充null值,所以不能为增加的新列指定notnull
(2).alter方式:
用于修改某些列。
格式:
Altertabletable_name
Altercolumn<列名><数据类型>[null|notnull]
注意:
①.不能改变列名。
②.不能将含有空值的列的定义修改为notnull约束。
③.若列中已有数据,则不能减少该列的宽度,也不能改变其数据类型。
④.只能修改null/notnull约束,其它类型的约束在修改前必须先将约束删除,然后再重新添加修改过的约束定义。
(3).drop方式:
只用于删除完整性约束定义。
格式:
Altertable<表名>
Dropconstraint<约束名>
Columncolumn_name//删除列
2.删除基本表
格式:
Droptabletable_name
注意:
只能删除自己建立的表,不能删除别人建立的表
(5).视图和索引及统计信息及其应用
㈠索引:
1.索引的作用:
加快查询速度,保证行的唯一性。
是针对一个表建立的。
优点:
①加速数据检查:
②加速连接、排序和分组:
③优化查询:
④强制实行行的唯一性:
2.索引的分类:
A.聚集索引与非聚集索引:
①.聚集索引:
按照索引的字段排列记录,并且按照排好的顺序将记录存储在表中。
适合范围查找。
②.非聚集索引:
按照索引的字段排列记录,但排列的结果不会存储在表中,而是存储在另外的位置。
在检索记录时,聚集索引会比非聚集索引速度快。
一个表中只能有一个聚集索引,而非聚集索引可以有多个。
B.唯一索引:
表示表中每一个索引值只对应唯一的数据记录。
常用在primarykey字段上,以区别每一个记录。
当表中有被设置为unique的字段时,系统自动建立一个非聚集索引。
当表中有被设置为primarykey的字段时,系统自动建立一个聚集索引。
C.复合索引:
将两个字段或多个字段组合起来建立的索引,单独的字段允许有重复的值。
3.创建索引的原则:
①应避免对经常更新的表创建大量的索引。
②若表的数据量大且更新少而查询较多时可以创建多个索引提高性能。
③当视图包含聚合、表连接或两者的组合时,在视图上创建索引。
④可以对唯一列或非空列创建聚集索引
⑤每个表只能创建一个索引
⑥在包含大量重复值的列上创建索引,查询时间会较长
⑦若查询语句中存在计算列,则可考虑对计算列值创建索引
⑧索引大小限制,最大键列数位16,最大索引键大小为900字节。
4.创建索引:
createindex
格式:
Create[unique(唯一)][cluster(聚集)|nonclustered(非聚集)]
index<索引名>
On<表名|视图名>
(<列名>·[ASC(升序)][DESC(降序)][ASC(默认)]··)
[on{filegroup_name//在给定的文件组上创建索引
Default}]//在默认的文件至上创建索引
5.查看与修改索引:
(1).Sp_helpindx存储过程可以返回表中的所有索引信息
格式:
Sp_helpindex[@objname]='name'
(2).sp_help:
用于显示数据库对象或数据类型的基本信息。
格式:
Sp_help[[@objname=]'name']
(3)Sp_rename存储过程可以更改索引名称。
格式:
Sp_helpindex'数据表名.原索引名','新索引名'
(4).修改索引:
格式:
Alterindex{index_name|all}
On
Rebulid//索引重建
[disable//将索引标记为已禁用
|reorganize//索引重组
|set(···)
//指定不重新生成或重新组织索引的索引选项。
//不能为已禁用的索引指定set
]
5.索引重组:
格式:
Alterindex{index_name|all}onobject
Reorganize
[partition=partition_number]//指定只重新生成或重组索引的一个分区
[with(lob_compaction)={on|off})]//压缩所有包含大型对象的页
例:
重组teaching数据库中student表上的IDX_sc索引
AlterindexIDX_scondbo.student
reorganize
6.索引重建:
将删除已存在的索引并创建一个新索引。
①格式:
Alterindex{index_name|all}
On
Rebulid
//对于填充因子等索引选项的重新设置。
[
[with([,···n])]
|[partition=partition_number//指定只重新生成(组成)的一个分区
[with([,···n])]
//单个分区重建索引参数
]
]
例:
重新设置teaching数据库student表上的ID_sname索引,设置填充因子,将填充因子设置为80%,设置中间排序结果存储在tempdb中。
AlterindexIDX_snameondbo.student
Rebulid
With(pad_index=on,fillfactor=80%,sort_in_tempdb=on)
②使用带drop_existing子句的createindex语句重建索引
例:
重新生成teaching数据库中student表上的C_studentno索引,将其修改为聚集唯一索引,并指定该索引的叶级页的填充度为70%。
CreateuniqueclusteredindexC_studentno
Ondbo.student(studentno)
With(pad_index=on,fillfactor=70,drop_existing=on)
7.删除索引:
dropindex
格式:
Dropindex数据表名.索引名
注意:
该命令不能删除有createtable或altertable命令创建的primarykey或unique约束索引,也不能删除系统表中的索引。
㈡.视图
1.概念:
视图是从一个或多个表及其他视图中通过select语句导出的虚拟表。
2.优点:
①简化数据查询和处理:
视图可以为用户集中数据。
②屏蔽数据库的复杂性。
③安全性。
④保证数据的逻辑独立性。
3.创建视图:
createview
格式:
Createview<视图名>[(<视图列表>)]
[with{encryption//对createview语句文本的条目进行加密。
|schemabinding//将视图绑定到基础表的架构上。
|view_metadata}]//返回有关视图的元数据信息。
As
[withcheckoption]
注:
在子查询中不许使用orderby子句和distinct短语,如需排列则可在视图定以后,对视图查询时再进行排序。
例:
在teaching数据库中创建一个名为v_course的视图,包含所有类别为“必修”的信息。
Createviewv_course
As
Select*
Fromcourse
Wheretype='必修'
注:
在创建视图的select查询语句中包含orderby子句时,在select语句的选择列表中必须包含top子句。
例:
在teaching数据库中创建一个名为v_final的视图,包含学生学号、姓名、课程号、课程名和期末成绩,按学号升序排列,相同学号的记录按课程号升序排列。
Createviewv_final
As
Selecttop(100)percentstudent.SNo,student.SN,
course.CNo,course.CN,score.final
fromstudent,course,score
wherestudent.SNo=score.SNoand
course.CNo=score.CNo
orderbystudent.SNo,course.CNo
注:
在一般情况下,不必再视图创建时指定列名,SQLServer使视图中的列于定义视图的查询所引用的列具有相同的名称和数据类型。
但是在有些情况下必须指定列名,包括:
①视图中的任何列都是从算数表达式、内置函数或常量派生而来。
②视图中有两列或多列原应具有相同的名称。
③希望为视图中的列指定一个与其原列不同的名称。
例:
在teaching数据库中创建一个名为v_max的视图,查询每个班最高分的课程名和分数,按班级号升序排列
createviewv_max
as
selecttop