数据库系统
课程一:基本知识与关系模型
第一讲 数据库系统简要介绍
数据库系统(工作环境)包括:
- 数据库Database (DB):相互有关联关系的Table的集合
- 数据库管理系统(DBMS) : 管理数据库的一种系统软件
- 数据库的管理员(DBA) : 进行数据库维护与控制
- 数据库应用(DBAP):数据库管理员开发出来给用户使用的软件
- 计算机基本系统
SQL:数据库语言:
表的抽象:
(关系)模式指的是表名加表标题:
- 表名
- 表标题(格式)
- 表内容(值)
- 关系/表:整个表的集合,包括以上所有
- 列/字段/属性/数据项(column/field/attribute/data item)每列都有列名和列值
- 行/元组/记录(row/tuple/record)
数据库定义:定义数据库中Table的名称标题(内含的属性名称及对该属性的值的要求等)
数据库管理系统定义
用户角度
数据库管理系统应该具有什么功能?
- 数据库定义功能:定义数据库中的Table的名称.标题(内含属性名称及对该属性的值的要求)等
- DBMS提供一套数据定义语言(DDL:Data Definition Language)给用户
- 用户使用DDL描述其所要建立表的格式
- DBMS依照用户的定义 ,创建数据库及其中的Table.
- 数据库操纵:像数据库的Table中增删更新数据及时对数据进行查询检索统计等
- DBMS提供一套数据操纵语言(DML:Data Manipulation Language)给用户
- 用户使用DML描述所要进行的增删改查等操作
- DBMS依照用户的定义 ,实际执行这些操作
- 数据库控制:控制数据库中数据的使用----哪些用户可以使用,哪些不可以使用
- DBMA提供一套数据控制语言(DML:Data Control Language)给用户
- 用户使用DCL描述所要实施的控制
- DBMS依照用户的定义 ,实际进行控制
- 数据库维护:转储/恢复/重组/性能监测/分析
- DBMS提供一系列(实例程序/例行程序)给用户
- 在这些程序中提供了对数据库维护的各种功能
- 用户使用这些程序进行各种数据库维护操作
- 一般都由DBA使用掌握
一条数据库语言语句相当于高级语言的一个或多个循环程序
系统角度
- 解析语言并执行的系统
- 形式构造自动化
- 在后台运行着一系列的程序:查询优化实现,编译与执行控制,存储与索引,事务处理,各种控制程序
- 语言编译器:将数据库语言书写的内容翻译成可执行命令
- 查询优化(执行引擎)与查询实现(基本命令的不同执行算法):提高数据库的检索速度的手段;例如管款于数据存取各阶段的优化程序
- 数据存取与索引:提供数据在磁盘磁带等上的高效存取的手段,例如存储管理器,缓冲区管理器,索引/文件和记录管理器
- 通信控制:提供网络环境下数据库操作与数据传输的手段
- 事务管理:提供提高可靠性并避免并发操作错误的手段
- 故障恢复:使数据库自动恢复到故障发生前正确状态的手段.例如备份,运行日志操控等
- 安全性控制:提供合法性检验,避免非授权非法用户访问数据库的手段
- 完整性控制:提供数据以及数据操作正确性检查的手段
- 数据字典管理:管理用户已经定义的信息
- 应用程序接口(API):提供应用程序使用DBMS特定功能的手段
- 数据库数据装载,重组等实用程序
- 数据库性能分析:统计在运行过程总数据库的各种性能数据,便于优化运行
第二讲 数据库系统的结构抽象与演变
DBMS管理数据的三个层次:
External Level = User Level
某一个用户能够看到与处理的数据,全局数据中的某一部分
Conceptual Level = Logic level
从全局角度理解/管理的数据,含相应的关联约束
Internal Level = Physical level
存储在介质上的数据,含存储路径,存储方式,索引方式等
数据与数据的结构-模式:
- 模式(Schema):对数据库中的数据所进行的一种结构性的描述所观察到数据的结构信息 (抽象)
- 视图(View)/数据(Data):某一表现形式下表现出来的数据库中的数据 (具体)
三级模式
三级模式(三级视图):
内模式(物理模式\存储模式),
概念模式(全局模式\逻辑模式),
外模式(用户模式)
如果只说模式(Schema),默认全局模式
只说视图(View)默认外部视图
两层映像
将一种结构变成另一种结构叫做映像
E-C Mapping:
- 将外模式映射为概念模式,从而支持数据概念视图向外部视图的转换
- 便于用户观察和使用
C-I Mapping:
- 将概念模式映射为内模式,从而支持实现数据概念视图向内部视图的转换
- 便于计算机进行存储和处理
两个独立性
逻辑数据独立性:
当概念模式变化是,可以不改变外部模式(只需要改变E-C Mapping),从而无需改变应用程序
物理数据独立性:
当内部模式变化时,可以不改变概念 模式(只需改变C-I Mapping),从而不改变外部模式
数据模型
数据模型:
- 规定模式统一描述方式的模型,包括:数据结构,操作和约束
- 数据模型是对模式本身结构的抽象,模式是对数据本身结构形式的抽象
eg:
- 关系模型:所有模式都可为抽象表(Table)的形式[数据结构],而每一个具体的模式都是拥有不同列名的具体的表,对这种表形式的数据有哪些[操作]和[约束].
三大经典数据模型
三大经典数据模型:
- 关系模型:表
- 层次模型:树
- 网状模型:图
第三讲 关系模型的基本概念
一个关系就是一个Table
关系模型就是处理Table的,它由三个部分组成:
- 描述DB各种数据的基本结构形式(Table/Relation)
- 描述Table与Table之间所可能发生的各种操作(关系运算)
- 描述这些操作所应遵循的约束条件(完整性约束)
关系模型的三个要素:
- 基本结构
- 基本操作: 并∪,差-,广义积×,选择 σ,投影π,
扩展:交集∩,连接▷◁,除÷ - 完整性约束: 实体完整性,参照完整性,用户自定义完整性
关系运算: 关系代数和关系演算
关系演算: 元组演算和域演算
关系代数: 基于集合的运算
操作的对象及结果都是集合,是一次一集合的操作,而非关系型的数据操作通常都是一次一记录的操作
基于关系代数设计的数据库语言(ISBL): 用计算机可识别的符号表征关系代数的运算符号
eg:R:F表选择运算(F表选择的条件),R%表投影运算
元组演算: 基于逻辑的运算
基于元组演算设计的数据库语言(QUEL): 用计算机可识别的符号表征元组演算的运算符号
eg:range of t is R,
retrieve t,
where t.sage < u.sage
域演算示例: 基于示例的运算
基于域演算设计的数据库语言示例: QBE
关系的数学定义
表的严格定义:
- 先定义列的取值范围: 域:(域是一组值的集合:这组值具有相同的数据类型)(如整数的集合,字符串的集合,全体学生的集合)集合中元素的个数称为域的基数
- 再定义"元组"及所有可能组合成的元组:笛卡尔积(就是每个域抽一个元素出来)
- 一组域D1,D2,…,Dn的笛卡尔积为:
D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,…,n} - 笛卡尔积的每个元素(d1,d2,…,dn)称为一个n-元组
- 元组(d1,d2,…,dn)的每一个值 d 叫做一个分量
- 元组(d1,d2,…,dn)是从每一个域任取一个值所形成的一种组合,笛卡尔积是所有这种可能组合的集合,即:笛卡尔积是由n个域形成的所有可能的n-元组的集合
- 若D1的基数为mi,则笛卡尔积的基数,即元组的个数为m1×m2×…×mn(笛卡尔积也是一个集合)
关系(Relation)( 由于笛卡尔积中的所有元组并不都是有意义的)
- 一组域D1,D2,…,Dn的笛卡尔积的子集
- 笛卡尔积中具有某一方面意义的那些元组被称作一个关系
- 由于关系的不同列可能来自同一个域,为区分,需要为每一个列起一个名字,该名字即为属性名
关系可用R(A1: D1,A2: D2…An: Dn)表示,可简记为R(A1,A2,…,An),这种描述又被称作关系模式或表标题
R是关系的名字,Ai是属性,Di是属性所对应的域,n是关系的度或目,关系中元组的数目称为关系的基数
关系模式与关系
- 同一关系模式下,可有很多的关系
- 关系模式是关系的结构,关系是关系模式在某一时刻的数据
- 关系模式是稳定的,而关系是某一时刻的值,是随着时间变化的
关系的特性
-
关系的列是同质:即每一列中的分量来自同一域,是同一类型的数据
-
不同的列可来自域同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名:
- 关系模式R(A1: D1,A2: D2…An: Dn)中,Ai(i=1,…,n)必须是不同的,而Di(i=1,…n)可以是相同的
-
行列位置互换性:区分是否为同一关系不是靠顺序,而是靠内容(名字或值)来区分的,而不是属性在关系中的位置来区分的
-
理论上,关系的任意两个元组不能完全相同(集合的要求:集合内不能有相同的两个元素);现实应用中,表(Table)可能并不完全遵守此特性.
-
元组相同是指两个元组的每个分量都相同
-
关系的属性不可再分:又被称为关系的第一范式
关系上的一些重要概念
-
关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去任何一个属性,它就不具有这一性质了,这样的属性组称为候选码.
-
主码/主键 :当有多个候选码的时,可以选定一个作为主码,DBMS以主码为主要线索管理关系中的每个元组.
-
主属性和非主属性:包含在任何一个候选码中的属性被称作主属性,而其他属性被称作非主属性(最简单的:候选码只包含一个属性,最极端的,所有属性构成这个关系的候选码:全码)
-
外码/外键 : 关系R中的一个属性组,他不是R的候选码,但他与另一个关系s的候选吗相对应,则称这个属性组为R的外码或者外键,两个关系通常是靠外码连接起来的.
关系模型中的完整性
实体完整性
- 关系的主码中的属性值不能为空值
- 空值:不知道或无意义的值(有控制的时候是需要特殊处理的,需要特别注意)
- 靠主码来唯一标识元组,若为空则不可标识
参照完整性
- 如果关系R1的外码Fk与关系R2的主码Pk想对应,则R1中的每一个元组的Fk值要么等于R2中某个元组的Pk值要么只能为空值
- 如果关系R1的某个元组参照了关系R2的某个元组t2,则t2必须存在
用户自定义完整性
- 用户针对具体的应用环境定义的完整性约束条件(属性和属性组合)
DBMS对关系完整性的支持:
- 实体完整性和参照完整性由DBMS系统自动支持
- DBMS系统可以使用户可以自行定义有关的完整性约束条件
- 当有更新操作发生时,DBMS将会自动按照完整性约束条件检验更新操作的正确性,即是否符合用户自定义完整性
第四讲 关系模型之关系代数
关系代数运算的特点:
- 基于集合,提供了(==并,差,笛卡尔积(广义积),选择,投影和更名等==)基本操作
- 以及交,连接和关系除等扩展操作,是一种集合思维的操作语言
- 关系代数操作以一个或者多个关系为输入,结果是一个新的关系
- 用对关系的运算来表达查询,需要指明所用操作,具有一定的过程性
- 是一种抽象的语言,是学习其他数据库语言,如SQL等的基础
关系代数操作:
集合操作:并,交,差,笛卡尔积
纯关系操作:投影,选择,连接,除
关系代数运算的基本操作
某些关系代数操作,如并,差,交等,需满足"并相容性"
并相容性:
- 参与运算的两个关系及相关属性之间有一定的对应性,可比性或意义关联性
- 定义:关系R和关系S存在相容性.当且仅当
(1)关系R和关系S的属性数目必须相同
(2)对于任意i,关系R的第i个属性的域必须和关系S的第i个属性的域相同.
假设R(A1,A2,…,An) ,S(B1,B2,…,Bm)
R和S满足并相容性: n=m,并且Domain(Ai)=Domain(Bi)
并:
- 定义:假设关系R和关系S是并相容的,则关系R与关系S的并运算结果也是一个关系,记作:R∪S,它由或者出现在关系R中,或者出现在S中的元组构成
- 数学描述:R∪S={t|t∈R或t∈S},其中t是元组
- 并运算是将两个关系的元组合并为一个关系,在合并时去掉重复的元组
差
- 定义:假设关系R和关系S是并相容的,则关系R与关系S的差运算结果也是一个关系,记作R-S,它由出现在关系R中但是不出现在关系S中的元组构成
- 数学描述:R-S={t|t∈R∧t∉S}其中t是元组
- R-S与S-R是不同的
广义笛卡尔积
- 定义:关系R(<a1,a2,…,an>) 与关系S(<b1,b2,…,bm>)的广义笛卡尔积(简称广义积,或 积 或笛卡尔积)运算结果也是一个关系,记作:R×S={<a1,a2,…,an,b1,b2,…,bm>|<a1,a2,…,an>∈R∧<b1,b2,…,bm>∈S}
- 当一个检索涉及到多个表时(如学生表和课程表),便需要将这些表串接或拼接起来,然后才能检索,这时,就要使用广义笛卡尔积运算,是各种连接运算的基础
- :R×S=S×R;
- 两个R和S属性个数分别为n和m,则R×S属性个数为n+m
- 两个R和S元祖个数分别为x和y,则R×S元祖个数为x×y
选择
- 定义:给定一个关系R,同时给定一个选择的条件condition(简记con),选择运算结果也是一个关系,记做σcon®,它从关系R中选择出满足给定条件的condition的元祖构成
- 数学描述: σcon®{t|t∈R∧con(t)=‘真’)}
- 设R(A1,A2,…,An),t是R的元祖,t的分量记为t[Ai],或简写为Ai
- 条件con由逻辑运算符连接比较表达式组成
- 逻辑运算符:∧∨非,或写成and ,or,not
- 比较表达式:XθY,其中X,Y式t的分量、常量或简单函数,θ是比较运算符
- 选择操作从给定的关系中选出满足条件的行
- 条件的书写很重要,尤其是在不同的运算符在一起的时候,要注意优先次序:
- 自高到低为(括号>比较>非>与>或)
投影
- 定义:给定一个关系R,投影运算结果也是一个关系,记作πA®,它从关系R中选出属性包含在A中的列构成
- 数学描述:πAi1,Ai2,…,Aik®={<t[Ai1],t[Ai2],…,t[Aik]>|t∈R}
- 设R{A1,A2,…,An}
- {Ai1,Ai2,…,Aik}是{A1,A2,…,An}的子集
- t[Ai]表示元祖t中相应与数学Ai的分量
- 投影运算可以对原关系的列在投影后重新排列
- 投影操作从给定关系中选出某些列组成新的关系,而选择操作是从给定关系中选出某些行组成新的关系
- 如果投影后有重复的元祖,则应该去掉
关系代数之扩展操作
交
- 定义:假设关系R和关系S是并相容的,则关系R与关系S的交运算结果也是一个关系,记作R∩S,它由同时出现在关系R和关系S中的元构成
- 数学描述: R∩S={t|t∈R∧t∈S},其中t是元祖
- 交可以通过差运算来实现:R∩S=R-(R-S)=S-(S-R)
连接
θ-连接操作
- 定义:给定关系R和关系S,R与S的θ连接运算结果也是一个关系,记作
它由关系R和关系S的笛卡尔积中,选取R中属性A与属性B之间满足θ条件的元祖构成
数学描述
- 设R{A1,A2,…,An},A∈{A1,A2,…,An}
- S{B1,B2,…,Bm}, B∈{B1,B2,…,Bm}
- t是关系A中的元祖,s是关系S中的元祖
- 属性A和属性B具有可比性
- θ是比较运算符
- 连接操作是在笛卡尔乘积操作下进行选择操作的结果
- 虽然我们在讲解θ-连接操作时,使用笛卡尔积然后再进行选择来得到 θ-连接结果,这主要是方便大家理解,但当引入连接操作后,DBMS可直接进行连接操作,而不必形成笛卡尔积
等值连接
自然连接
- 定义:给定关系R和关系S,R和S的自然连接运算结果也是一个关系,它由关系R和关系S的笛卡尔积中选取相同属性组B上值相等的元祖所构成
- 数学描述:
- 自然连接是一种特殊的等值连接
- 要求关系R和关系S必须有相同的属性组B(如R,S共有一个属性B1,则B是B1,如R,S共有一组属性B1,B2,…,Bn,)则B是这些共有的所有属性
- R,S属性相同,值必须相等才能连接
- 要在结果中去掉重复的属性列(因结果中R.B1始终是等于S.B1,所以可值保留一列即可)
- 要求关系R和关系S必须有相同的属性组B(B1, B2, …)
- R和S的属性组B的值完全相同的元组才能够连接
- 要在结果中去掉重复的属性列(这些重复列的值完全一样)
更名操作
- θ连接操作会遇到特殊情况:自己和自己连接,这个时候为了避免重名,需要进行更名操作
书写关系代数表达式的基本思路
-
检索是否涉及多个表,如不涉及,则可直接采用并、差、交、选择与投影,只要注意条件书写正确与否即可
-
如涉及多个表.则检查
- 能否使用自然连接,将多个表连接起来(多数情况是这样的)
- 如不能,能否使用等值或不等值连接(θ-连接)
- 还不能,则使用广义笛卡尔积,注意相关条件的书写
-
连接完后,可以继续使用选择,投影等运算,即所谓数据库的"选投联"操作
关系代数之复杂扩展操作
除
- 除法运算经常用于求解"查询…全部的/所有的"问题
- 前提条件:给定关系R{A1,A2,…,An}为n度关系,关系S{B1,B2,…,Bm}为m度关系, 如果可以进行关系R与关系S的除运算,档期仅当:属性集{B1,B2,…,Bm}是属性集{A1,A2,…,An}的真子集,即m<n
- 定义:关系R和关系S的除运算结果也是一个关系,记作R÷S,分两部分来定义:
先定义R÷S结果的属性应有哪些?
设属性集{C1,C2,…,Ck}={A1,A2,…,An} - {B1,B2,…,Bm},则有k=n-m;则R÷S结果关系是一K度(n-m度)关系,由{C1,C2,…,Ck}属性构成 - 再定义R÷S的元组怎形成
外连接
- 定义:两个关系R与S进行连接时,如果关系R(或S)中的元组在S(或R)中找不到想匹配的元组,则为了避免该元组信息丢失,从而将该元组与S(或R)中假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称为外连接
第五讲:关系模型之关系演算
关系元组演算
- 关系元组演算是以元组变量作为谓词变量的基本对象
- 关系元组演算公式
- Pt运算符的优先次序
存在量词和全称量词
有点类似于循环,并且按条件一层一层写下去.
关系域演算
- 关系域演算是以 域变量作为谓词变量的基本运算
基于关系域演算的QBE的语言
不重要
关系运算的安全性
不产生无限关系和无穷验证的运算被称作为是安全的.
- 关系代数是一种集合运算,是安全的
- 关系演算不一定是安全的
- 需要对关系演算施加约束条件,即任何公式都在一个集合范围内操作,而不是无限范围内操作,才能保证其安全性. (要定义一个安全约束有限集合DOM)
- DOM(φ)是一个有限集合,其中的每个符号要么是φ中明显出现的符号,要么是出现在φ中的某个关系R的某元组的分量
- DOM主要用于约束φ中一些谓词的计算范围,它不必是最小集合
关于关系运算的一些观点
- 关系运算有三种:关系代数,关系元组演算和关系域演算
- 三种关系运算都是抽象的数学运算,体现了三种不同的思维
-
关系代数----以集合为对象的操作思维,由集合到集合的变化
-
元组演算----一元组为对象的操作思维,取出关系的每一个元组进行验证,有一个元组变量则可能需要一个循环,多个元组变量则需要多个循环
-
域演算---- 以域变量为对象的操作思维,取出域的每一个变量进行验证看其是否满足条件
-
==三种运算之间是等价的:==关系代数域安全的元组演算表达式与安全的域演算表达式是等价的
-
==三种关系运算都可说是非过程性的:==相比之下:域演算的非过程性最好,元组演算次之,关系代数最差
-
三种关系运算虽然是抽象的,但确实衡量数据库语言完备性的基础
-
课程二:数据库语言SQL
第六讲 概览SQL语言
- SQL语言是集DDL,DML,DCL为一体的数据库语言
- SQL语言主要由以下9个单词引导的操作语句来构成,但是每一种语句都能表达复杂的操作请求
- DDl语言引导词:Create(建立),Alter(修改),Drop(撤销)
- 模式的定义和删除,包括定义Database,Table,View,Index,完整性约束条件等,也包括定义对象(RowType行对象,Type列对象)
- DML语句引导词:Insert,Delete,Update,Select
- 各种方式的更新与检索操作,如直接输入记录,从其他Table输入
- 各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等
- 各种聚集操作,求平均,求和等,分组聚集,分组过滤等
- DCL语句引导词:Grant,Revoke
- 安全性控制:授权和撤销授权
建立数据库
包括两件事:定义数据库和表(使用DDL),向表中追加元组(使用DML)
DDL:
创建数据库(DB)
- 创建数据库(DB):Create Database 数据库名字;(数据库是若干具有相互关联关系的Table/Relation的集合,可以看做是一个集中存放若干Table的大型文件)
创建DB中的Table
-
创建DB中的Table(定义关系模式):Create Table 表名(列名 数据类型[Primary key|Unique] [Not null] ,列名 数据类型[Primary key|Unique] [Not null]…)
- []表示其括起的内容可以省略,|表示可以取其一
- Primary key:主键约束,每个表只能创建一个主键约束
- Unique:唯一性约束(即候选键),可以有多个唯一性约束
- Not null:非空约束,是指该列允许不允许有空值出现,如果选择了Not Null表明该列不允许有空值出现
- char(n)/varchar(n)/int/numeric/real/date/time
-
向表中追加元组:insert into 表名[(列名[,列名]…] values (值 [,值],…);
- values后面值得排列,须与into子句后面的列名排列一致
- 若表名后的所有列名省略,则values后的值得排列,须与该表存储中的列名排列一致
Select的简单语法形式:
- Select的简单语法形式:
Select 列名 [[,列名]…]
From 表名
[Where 检索条件];- 语义:从表名所给出的表中,查询出满足检索条件的元组,并按照给定的列名及顺序进行投影展示
- 检索条件的书写(and or not )
- 检索结果中要求无重复元组,是通过DISTINCT保留字的使用来实现的(Select DISTINCT S#…)
- 检索结果进行排序,SELECT-FROM-WHERE-ORDER BY
order by 列名 [asc|desc] - 模糊查询 SELECT-FROM-WHERE * LIKE *
列名 [not] like “字符串”- 匹配规则: ‘%’ 匹配零个或多个字符
‘-’ 匹配任意单个字符
‘’ 转义字符,用于去掉一些特殊字符的特定含义
一个汉字需要两根–
- 匹配规则: ‘%’ 匹配零个或多个字符
多表联合查询
多表联合查询
- Select 列名[,列名]
From 表名1,表名2,…
Where 检索条件;
相当于表名进行笛卡尔积 - 等值连接用Where 来做限定,多表连接时,如果两个表的属性名相同,则需要采用表名.属性名方式来限定该属性是属于哪一个表
- 重名之处理:连接运算涉及到重名的问题,需要使用别名
- select采用别名的方式
Select 列名 as 列别名 [[,列名 as 列别名]…]
Where 检索条件 - 上述定义中as可以省略
- 当定义了别名后,在检索条件中可以使用别名来限定属性
- select采用别名的方式
SQL之更新操作
SQL之更新操作
-
元组新增Insert:新增一个或一些元组到数据库的Table中
-
元组更新Update:对某些元组中的某些属性值进行重新设定
-
元组删除Delete:删除某些元组
- SQL-DML既能单一记录操作,也能对记录集合进批更新操作
- SQL-DML用子查询概念,.以便处理一些某些
SQL-之INSERT
- SQL-之INSERT
-
元组新增insert命令有两种形式
- 单一元组新增命令形式:插入一条指定元组值的元组
- insert into 表名 [(列名[,列名]…)]
values (值[,值]…);
- insert into 表名 [(列名[,列名]…)]
- 单一元组新增命令形式:插入一条指定元组值的元组
-
批数据新增命令形式:插入子查询结果的若干元组,待插入的元组由子查询给出
- insert into 表名 [(列名[,列名]…)]
子查询
- insert into 表名 [(列名[,列名]…)]
-
SQL-之DELETE
- SQL-之DELETE
- 元组删除Deleet命令:删除满足指定条件元组
Delete From 表名 [Where 条件表达式];- 如果Where条件省略,则删除所有的元组
- 元组删除Deleet命令:删除满足指定条件元组
SQL-之UPDATE
- SQL-之UPDATE
- 元组更新Update命令,用指定要求的值指定表中满足条件的元组的指定列的值
- ==Update 表名
Set 列名 = 表达式 | (子查询)
[[,列名 = 表达式 | (子查询)]…]
[Where 条件表达式] ==
如果Where条件省略,则更新所有的元组
- ==Update 表名
- 元组更新Update命令,用指定要求的值指定表中满足条件的元组的指定列的值
SQL-DDL之撤销与修改
- SQL-DDL之撤销与修改
- 修正数据库:修正数据库的定义,主要是修正表的定义
- 修正基本表的定义
alter table tablename
[add {colname datatype,…}] //增加新列
[drop{完整性约束名}] //删除完整性约束
[modify {colname datatype,…}] //修改列定义
//删除学生姓名必须取唯一值的约束
撤销基本表
- 撤销基本表
Drop Table 表名
Drop Database 数据库名;
//SQL-delete语句只是删除表中的元组,而撤销是撤销表所有格式,元组,该表导出的视图等相关的所有内容
USE和CLOSE
- 存在多个数据库时,我们会使用use与close去选择数据库
use 数据库名;
close 数据库名;
数据库授权
- 数据库授权
grant 权限 on 表名 to 用户名
权限有:select,update,insert,delete,exec,dri
第七讲 利用SQL语言表达复杂查询
IN 子查询
-
基本语法:
表达式 [not] in (子查询) -
语法中,表达式的最简单形式就是列名或常数
-
语义:判断某一表达式的值是否在子查询的结果中
-
注意:
- 非相关子查询:内层查询独立进行,没有涉及任何外层查询相关信息的子查询
- 相关子查询:内层查询需要依靠外层查询的某些参量作为限定条件才能进行的子查询,外层向内层传递的参量需要使用外层的表名或表别名来限定,且相关子查询只能有外层想内层传递参数,而不能反之,这也称为变量的作用域原则
θ Some 与θ All子查询
- 基本语法:
表达式 θ some (子查询)
表达式 θ all (子查询)
语法中,θ是比较运算符
语义:将表达式的值与子查询的结果进行比较:- 如果表达式的值至少与子查询 的结果的某一个值相比较满足θ关系,则表达式 θ some (子查询) 的结果为真
- 如果表达式的值与子查询结果的所有值相比较都满足θ关系,则表达式 θ all (子查询) 的结果便为真
等价性变换
下列表达方式含义是相同的
- 表达式 = some (子查询)
- 表达式 in (子查询)
但是 not in 与 some不等价
等价的是如下两个
- 表达式 not in (子查询)
- 表达式 <> all(子查询)
(NOT) EXISTS子查询
- 基本语法 :
- [not] Exists (子查询)
- 语义:子查询结果中有无元组存在
利用SQL语言进行结果计算与聚集计算
- 聚集函数
利用SQL语言进行分组查询与分组过滤
- 分组查询
- 分组过滤
聚集函数不能放在Where子句中,一般放在Having中做过滤条件的
- Having子句和Where子句表达条件的区别
利用SQL语言实现关系代数操作
- 并交差的处理
SQL语言空值处理
不能写 Where Sage = null; 空值是不能进行运算的
SQL语言内连接外连接
SQL-SELECT的完整语法
- == SQL-SELECT的完整语法==
SQL-视图的概念和结构
- SQL-视图的定义
帮你们
- SQL-视图的使用
使用视图:定义好的视图,可以像Table一样,在SQL各种语句中使用
视图其实并未存储,其实只是存储了SQL语句
视图的能否更新看的是是否更新的是视图还是对基本表的更新
第八讲 SQL语言与数据库完整性和安全性
数据库完整性
- 数据库完整性是指DBMS应保证的DB的一种特性-在任何情况下的正确性、有效和一致性
- 广义完整性 :语义完整性,并发控制,安全控制,DB故障恢复
- 狭义完整性: 转指语义完整性,DBMS通常有专门的完整性管理机制和程序来处理语义完整性问题
数据库完整性问题:
- 不正当的数据库操作:如输入错误,操作失误,程序处理失误
数据库完整性管理的作用
-
防止和避免数据库中不合理数据的出现
-
DBMS应尽可能地自动防止DB中语义不合理现象
-
如DBMA
-
不能自动防止,则需要用户和应用程序员操作处处小心,所以要尽可能让DBMS来承担
-
DBMS允许用户定义一些完整性约束规则(用SQL-DDL来定义)
-
当有DB更新操作时,DBMS自动按照完整性约束条件来进行检查,以确保更新操作符合语义完整性
完整性约束条件(或称完整性约束规则)的一般形式
- Intergrity Constraint ::= (O,P,A,R)
- O : 数据集合:约束的对象性
-列.多列(元组).元组集合 - P:谓语条件:什么样的约束
- A:触发条件:什么时候检查?
- R:响应动作:不满足时怎么办?
数据库完整性的分类
SQL语言实现约束的方法- Create Table
静态约束
列约束
表约束
- check中的条件可以是Select- From-Where内任何Where后的语句,包含子查询
断言ASSERTION
动态约束
数据库安全性的概念及分类
数据库安全性是指DBMS应该保证数据库的一种特性(机制或手段):免受非法,非授权用户的使用,泄露,更改或破坏
DBMS的安全机制:
- 自主安全机制:存取控制
- 通过权限在用户之间的传递,使用户自主管理数据库安全性
- 强制安全机制:
- 通过对数据和用户强制分类,使得不同类别用户能够访问不同类别的数据
- 推断控制机制
- 数据加密存储机制
自主安全性机制
- 授权命令