数据库基础知识个人整理版.docx
《数据库基础知识个人整理版.docx》由会员分享,可在线阅读,更多相关《数据库基础知识个人整理版.docx(36页珍藏版)》请在冰点文库上搜索。
数据库基础知识个人整理版
第一章关系数据模型1
数据模型(静态)得三要素1
一关系数据结构1
二关系操作2
三关系完整性约束2
四关系代数2
第二章关系数据库得标准语言SQL4
一SQL动词表4
二数据定义4
三数据更新8
四数据查询8
五授权15
六完整性约束命名子句17
七触发器17
第三章关系数据库理论18
一关系模式(回顾)18
二数据依赖18
三规范化18
第一章关系数据模型
数据模型(静态)得三要素
一关系数据结构
(一)基本概念包括:
1属性(Attribute):
实体所具有得某一特征。
(如学生得特征就是学号、姓名、----)
域(Domain):
属性对应得一组具有相同数据类型得值得集合。
每个属性有一个域。
(关系模型限定域必须原子性1NF)
2键(key)
(1)候选键(candidatekey)
关系得某一属性或属性组得值唯一标识一个元组,而其任何真子集无此性质。
候选键得诸属性称为主属性,不包含在任何候选键中得属性称为非主属性。
(2)主键(primarykey)
一个关系至少有一个侯选键,可以有几个侯选键。
一般从侯选键中选择一个作为主键(primarykey),其她得称为侯补键(alternatekey)
每个主键得值就是不能相同得,
(3)外键(foreignkey)
如关系中得属性或属性组不就是本关系得主键,而引用其她关系或本关系得主键,则称为本关系得外键。
3关系(Relation):
(1)关系:
定义在事物得所有属性域上得多元关系,一个关系就就是一张二维表。
(2)关系模式:
关系得描述称为关系模式,它可以形式化得表示为
R(U,D,DOM,F)
R为关系名
U为组成该关系得属性名集合
D为属性组U中属性所来自得域
DOM为属性向域得映像集合
F为属性间数据得依赖关系集合
关系模式通常简记为:
R(U)或R(A1,A2,A3,……,An)
关系得三种基本类型
基本表:
就是实际存在得表,它就是实际存储数据得逻辑表示。
查询表:
就是查询结果对应得表。
视图表:
就是由基本表或其她视图导出得表,就是虚表,不对应实际存储内容。
二关系操作
(一)两种关系操作
1查询(Query)
查询可以分为选择(SELECT),投影(Project),连接(Join),交(Intersection),并(Union),差(Except),除(Divide),笛卡尔乘积。
其中选择,投影,并,差,笛卡尔乘积就是5种基本操作,其她得操作可用这些基本操作定义与导出
2插入(Insert),删除(Delete),修改(Update)
(二)关系操作得特点
集合式得操作方式,即操作得对象与结果都就是集合。
(三)关系数据语言可以分为三类
1关系代数语言
2关系演算语言(元组关系演算与域关系演算)
3具有关系代数与关系演算双重特点得语言(SQL语言)
三关系完整性约束
关系数据库得数据必须遵循得约束
实体完整性(EntityIntegrity)
参照完整性(ReferentialIntegrity)
用户自定义完整性(User-DefinedIntegrity)
实体完整性与参照完整性就是关系模型必须满足得完整性约束条件,被称为关系得两个不变性。
(一)实体完整性
实体完整性规则:
关系模式R得主属性值不可为空
指所有主属性均不可取空值,不仅仅就是主键不可为空
(二)参照完整性
1外键(ForeignKey)
定义:
设F就是基本关系R得一个或一组属性,但不就是关系R得码,KS就是基本关系S得主码。
如果F与KS相对应,则称F就是R得外码(ForeignKey)
R称为参照关系(ReferentialRelation),S称为被参照关系(ReferencedRelation)
2参照完整性规则
若属性(或属性组)F就是基本关系R得外码,它与基本关系S得主码KS相对应(基本关系到R与S不一定就是不同关系),则对于R中每个元组在F上得值必须为:
(1)等于被参照关系S中所参照得候选键得某个值
(2)空值
(三)用户自定义完整性
针对某一具体数据得约束条件,反映某一具体应用所涉及得数据必须满足得特殊语义
由应用环境决定
四关系代数
关系代数按运算符得不同可分为传统关系运算与专门关系运算
(一)传统关系运算(交,并,差,笛卡尔乘积)
1∪(并)R1∪R2=b2d
b3b
c2d
d3b
a3c
e5f
g66
2∩(交AND)R1∩R2=b2d
c2d
3━(差)R1━R2=b3b
d3b
4╳(笛卡尔乘积)R1╳S=b2d2d
b2d3b
b3b2d
b3b3b
c2d2d
c2d3b
d3b2d
d3b3b
(二)专门关系运算
1选择(SELECT)(选择符合条件得元组)
δ<选择条件>(<关系名>)如:
δ性别=男(STUDENT)
表得水平划分
2投影(Project)(选择符合条件得属性)
Π<属性表>(<关系名>)如:
Π学号,姓名(STUDENT)
表得垂直划分
3连接操作(Join)
笛卡尔乘积R╳S={|t∈RANDg∈S}
(1)连接分为等值连接与自然连接
AфB
连接操作:
R|╳|S其中A与B分别为R与S上度数相等且具有可比性得属性组
1)等值连接(ф为=)
R1、A1R1、A2R1、A3S、A2S、A3
如上例R1|╳|S=b2d2d
R1、A2=S、A2b3b3b
c2d2d
d3b3b
2)自然连接(只有|╳|)
一般连接就是从行得角度出发得,但自然连接还要取消重复得列,就是从行与列得角度进行运算
S、A2S、A3
R1、A1R1、A2R1、A3
如R1|╳|S=b2d
B3b
4除运算(÷)
R1、A1
如R1÷S=b
在R1上b印象集合就是{(2,d),(3,d)}
S在(A1,A2)上得投影为{(2,d),(3,d)}
第二章关系数据库得标准语言SQL
一SQL动词表
SQL功能
动词
数据查询
SELECT
数据定义
CREATE,DROP,ALTER
数据操纵
INSERT,UPDATE,DELETE
数据控制
GRANT,REVOKE
二数据定义
操作对象
操作方式
创建
删除
修改
模式
CREATESCHEMA
DROPSCHEMA
表
CREATETABLE
DROPTABLE
ALTERTABLE
视图
CREATEVIEW
DROPVIEW
索引
CREATEINDEX
DROPINDEX
注意
SQL通常不提供修改模式定义,修改视图定义,修改索引定义得操作
(一)模式得定义与删除
1模式得定义
CREATESCHEMA<模式名>AUTORIZATION<用户>
例如:
CREATESCHEMA“s-t”AUTORIZATIONwang;
(1)要创建模式,调用该命令得用户必须具有DBA权限,或者获得了DBA授予得CREATESCHEMA权限
(2)如果没指定<模式名>那么<模式名>隐含为<用户名>
(3)定义模式,实际上就是定义了一个命名空间,在这个空间中可以进一步定义该模式包含得数据库对象,例如基本表,视图,索引。
2模式得删除
DROPSCHEMA<模式名>(两者必选其一)
例如:
DROPSCHEMA“s-t”CASCADE;
(1)CASCADE(级联)表示在删除模式得同时把该模式中所有得数据库对象全部一起删除。
(2)RESTRICT(限制)表示在删除该模式中已经定义了下属数据库对象(表,视图索引),则拒绝该删除语句。
(二)表得定义,删除与修改
1表得定义
CREATETEBLA<表名>(<列名><数据类型>[列级完整性约束]
[,<列名><数据类型>[列级完整性约束]]
[,<表级完整性约束>])
列定义得完整格式:
<列名><列类型>[DEFAULT<默认值>][[NOT]NULL][<列约束>]
CREATETEBLA<表名>AS
若要定义模式式下得表:
CREATETABLE<模式名>、<表名>
(1)数据类型
ANSI/ISO
Oracle
字符型
Char(n)
Char(n)
Character(n)
CharacterVarying(n)
Varchar2(n)
CharVarying(n)
数值型
Numeric
Number
Decimal
Integer
Int
Float
Double
Real
日期型
Date
Date
Time
(2)完整性约束
主键约束(PrimaryKey)实体完整性
外键约束(ForeignKey)参照完整性
检查约束(Check)用户自定义完整性
唯一键约束(Unique)
非空约束(Null|NotNull)
默认值(Defautl)
(3)例子
CREATETABLEstudent
(SnoCHAR(8)PRIMARYKEY,
SnameCHAR(20)UNIQUE,
SsexCHAR
(2)DEFALULT‘男’,
SageSMALLINTCHECK(Sage>0)
SdeptCHAR(20)
)
CREATETABLECourse
(CnoCHAR(4)PRIMARYKEY,
CnameCHAR(40),
CpnoCHAR(4)REFERENCESCourse(Cno),
CcreditSMALLINT,
CHECK(Ccredit>0)
)
CREATETABLEsc
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),//注意一定要有括号
FOREIGNKEY(Sno)REFERENCESCourse(Cno),//sno一定要有括号)
(4)说明
1)列约束:
在每个列后定义,可以有多个约束子句,不能定义多个列上得约束
2)表约束:
在全部列定义完成后定义,可以有多个约束子句,多个列上得约束必须使用表约束,单列上得约束可以用列约束,也可用表约束
2表得删除
DROPTABLE<表名>[CASCADE|RESTRICT]
(1)CASCADE(级联)删除该表没有任何限制,删除表得同时,相关得依赖对象(如视图)也一起删除。
(2)RESTRICT(限制)删除该表就是有限制条件得。
欲删除得表不能被其她表得约束所引用(如CHECK,FOREIGNKEY等约束),不能有视图,不能有触发器(trigger),不能存储过程或函数。
(3)缺省情况下就是RESTRICT
3表得修改
ALTERTABLE<表名>
[ADD<列名><数据类型>[完整性约束]]|
[MODIFY<列名><数据类型>[完整性约束]]|
[DROPCOLUMN<列名>]|
[ADD<表约束>]|
[DROPCONSTRAINT<约束名>]
例如
(1)ALTERTABLEStudent
ADDDeptVarchar2(10)UNIQUE
(2)AlterTableStudent
DROPCOLUMNage
`(3)AlLTERTABLEStudent
MODIFYagenumber(3)NOTNULL
(4)ALTERTABLEStudent
ADDCONSTRAINTPK_StudentPRIMARYKEY(S#)
(5)ALTERTABLESC
DROPCONSTRAINTFK_SC
(三)视图得定义与删除
1视图得定义
CREATEVIEW<视图名>(列名1,列名2,…)//列名一定要放在括号里
AS<查询>
[WITHCHECKOPTION|WITHREADONLY]
例如:
CREATEVIEWcs_view(sno,name,age)
ASSELECTs#,sname,age
FROMstudent
WHEREDept=‘计算机系‘
WITHREADONLY;
(1)WITHCHECKOPTION表示对视图进行UPTATE,INSERT,DELETE操作时要保证更新,插入,删除得行满足视图定义中得谓词条件(即子查询中得条件表达式)
WITHREADONLY表示视图就是只读得
(2)视图得属性列名只能就是全部缺省或全部指定,没有别得选择。
但在下列两种情况下必须明确指定组成视图得列名。
1)某个目标列不就是单纯得属性名,而就是聚集函数或列表达式。
2)多表连接时选出几个同名列作为视图得字段。
(3)子查询可以就是任意得SELECT子句,但通常不允许含有OREERBY子句各DISDINCT短语。
(4)不就是所有视图都就是可更新得
1)基于联接查询得视图不可更新
2)使用了函数得视图不可更新
3)使用了分组操作得视图不可更新
4)只有建立在单个表上而且没有使用函数得视图才就是可更新得
2视图得删除
DROPVIEW<视图名>[CASCADE]
(四)索引得定义与删除
1索引得定义
CREATE[UNIQUE|CLUSTER]INDEX<索引名>
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…)
例如:
CREATEUNIQUEINDEXSCnoonSC(SnoASC,CnoDESC);
(1)UNIQUE表明此索引得每一个索引值只对应唯一得数据记录
(2)CLUSTER表示要建立得索引就是聚簇索引。
聚簇索引就是指索引项得顺序与表中得物理顺序一致得索引组织,在一个表上只能建立一个聚簇索引。
(3)次序可选ASC(升序)或DESC(降序)缺省值为ASC
2索引得删除
DROPINDEX<索引名>
DROPINDEXSCno;
三数据更新
(一)插入数据
INSERT插入数据通常有两种形式,一种就是插入一个元组,另一种就是插入子查询结果。
后者可以一次插入多个元组。
1插入一个元组
INSERT
INTO<表名>[(<属性列1>[,<属性列2>])]
VALUES(<常量1>[,<常量2>])
例如INSERT
INTOStudent(Sno,Sname,Ssex,Sdept,Sage)
VALUES(‘’,‘陈冬’,‘男’,‘IS’,18);
INTO语句中没有出现得属性列,新元组在这些列上将取空值或默认值。
在INTO子句中只指出了表名,没有指出属性名,新元组要在所有属性列上都指定值,属性列得次序与CREATETABLE中得次序相同。
2插入子查询结果
INSERT
INTO<表名>[(<属性列1>[,<属性列2>])]
子查询;
例如INSERT
INTODept_age(Sdept,Avg_age)
SELECTSdept,AVG(Sage)
FROMStudent
GROUPBYSdept;
(二)修改数据
UPDATE<表名>
SET<列名>=<表达式>[,<列名>=<表达式>]…
[WHERE<条件>];
例如:
UPDATEStudent
SETSage=22
WHERESno=’21’;
(三)删除数据
DELETE
FROM<表名>
[WHERE<条件>];
例如:
DELETE
FROMStudent
WHERESno=’’;
DELETE语句删除得就是表中得数据,而不就是关于表得定义。
四数据查询
基本数据查询得格式:
SELECT[ALL|DISTINCT]<目标列表达式>AS<别名>[,<标列表达式>AS<别名>]…
FROM<名或视图名>[,<表名或视图名>]…
[WHERE<查询表达式>]
[GROUPBY<列名1>][HAVING<条件表达式>]]
[ORDERBY<列名2>][ASC|DESC];
(一)单表查询
在一个表中查询数据
1*查询
查询全部记录:
查询全部得学生信息
SELECT*FROMStudent;
*表示所有列
等同于
SELECTs#,sname,age,sexFROMStudent
2使用别名(AS或空格)
使用别名:
查询所有学生得学号与姓名
SELECTs#AS学号,snameAS姓名FROMStudent
如果别名包含空格,须使用双引号
SELECTs#AS“StudentNumber”FROMStudent
3表达式查询(三种表达式,字符串表达式,算术表达式,函数表达式)
(1)字符串表达式
查询所有学生得学号、姓名与出生年份,返回两列信息,其中一列就是“学号:
姓名”,另一列就是出生年份
SELECTs#||“:
”||snameAS学生,2003-ageAS出生年份FROMStudent
说明
连接字符串||表示则多个查询列连接为一个列输出。
(2)算术表达式
查询学生得出生年份
SELECT2003-ageAS出生年份FROMStudent;
(3)函数表达式
SELECTsno,to_char(birth,‘mm-dd-yyyy’)ASbirthdayFROMStudent
SELECTCount(sno)As学生人数FROMStudent
4条件查询
(1)WHERE条件
注:
1)在where子句中使用列名与表达式,但不能使用别名。
2)在where子句中使用数值时,既可以用单引号也可以不用单引号,使用日期值
字符值时,都必须使用单引号,并且日期值得格式必须要符合数据库中支持得日
期格式,否则必须事先使用to_date函数将其转换成为数据库中支持得日期格式。
oracle中日期得默认格式为:
01-1月-82
在输入查询条件时,可以用to_date(‘1998’-01-01,’yyyy-mm-dd’)
3)在SQL语句中,命令不区分大小写,但字符串区分大小写
WHERE子句中得关系运算符:
比较操作符:
>,<,>=,<=,=,<>
逻辑操作符:
ANDORNO
其她操作符:
IN
BETWEENAND
ISNULL与ISNOTNULL
LIKE
EXISTS
例如:
1)IN:
查询‘s001’,’s003’,’s006’与’s008’四学生得信息
SELECT*FROMStudent
WHEREs#IN(‘s001’,’s003’,’s006’,’s008’)
2)IS[NOT]NULL:
查询缺少年龄数据得学生
SELECT*FROMStudentWHEREageISNULL
LIKE:
查询姓名得第一个字母为‘R’得学生
SELECT*FROMStudentWHEREsnameLIKE‘R%’
%:
任意长度得字符串
_:
单个字符(一个汉字占两个字节)
注意:
LIKE只能用于字符串得匹配,不能用于其她类型。
查询姓名得第一个字母为‘R’并且倒数第二个字母为‘S’得学生
SELECT*FROMStudentWHEREsnameLIKE‘R%S_’
多个比较式可用NOT、AND与OR连接
SELECT*FROMStudent
WHEREageISNULLandsnameLIKE‘R%’
3)若要查询通配符可以用转义字符escapecharacter通常character用\
(2)去除重复记录(DISTINCT)
查询学生得姓名
SELECTDistinctsnameFROMStudent
DISTINCTt只对记录有效,不针对某个特定列
SELECTDistinctsname,ageFROMStudent
(3)排序查询(ORDERBY)
注:
1)orderby只能对最终查询结果进行排序,也就就是说其只能放在查询语句得最后一条。
2)可以使用列得别名,列得位置进行排序。
3)在大多数情况下,指定得排序列(orderby列名)都就是选择列(select列名),但排序
列也可以不就是选择列。
但如果在select语句中使用了distinct关键字,则排序列必须
就是选择列了。
查询所有学生信息并将结果按年龄升序排列
SELECT*FROMStudentORDERByage
将结果按年龄升序排列,按姓名降序排列
SELECT*FROMStudent
ORDERByageASC,snameDESC
ASC表示升序,DESC表示降序
(4)聚集函数
注:
1)聚集函数与groupby子句联合使用,表示对每个组进行统计,否则将所有数据行当
成一个组进行统计。
2)聚集函数只能出现在选择列表、orderby子句、having子句中,而不能出现在where
与groupby子句中。
3)除了count(*)外,其她聚集函数都会忽略null行。
4)聚集函数中可以指定all与distinct选项。
其中all就是默认选项,表示统计所有得行(包
括重复行),而distinct只统计不同得行。
count(distinctsal)
([DISTINCT|ALL]<列名>)
COUNT(列名):
对一列中得值计数
COUNT(*)