数据库的4个基本概念
1.数据(Data):描述事物的符号记录称为数据。
2.数据库(DataBase,DB):长期存储在计算机内、有组织的、可共享的大量数据的集合。
3.数据库管理系统(DataBase Management System,DBMS
4.数据库系统(DataBase System,DBS)
数据模型
数据模型(data model)也是一种模型,是对现实世界数据特征的抽象。用来抽象、表示和处理现实世界中的数据和信息。数据模型是数据库系统的核心和基础。
数据模型的分类
第一类:概念模型
按用户的观点来对数据和信息建模,完全不涉及信息在计算机中的表示,主要用于数据库设计现实世界到机器世界的一个中间层次
- 实体(Entity): 客观存在并可相互区分的事物。可以是具体的人事物,也可以使抽象的概念或联系
- 实体集(Entity Set): 同类型实体的集合。每个实体集必须命名。
- 属性(Attribute): 实体所具有的特征和性质。
- 属性值(Attribute Value): 为实体的属性取值。
- 域(Domain): 属性值的取值范围。
- 码(Key): 唯一标识实体集中一个实体的属性或属性集。学号是学生的码
- 实体型(Entity Type): 表示实体信息结构,由实体名及其属性名集合表示。如:实体名(属性1,属性2,…)
- 联系(Relationship): 在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体型内部的联系(各属性)和实体型之间的联系(各实体集)。有一对一,一对多,多对多等。
第二类:逻辑模型和物理模型
逻辑模型是数据在计算机中的组织方式
物理模型是数据在计算机中的存储方式
数据模型的组成要素
数据模型通常由数据结构、数据操作和数据的完整性约束条件三部分组成
关系模型(数据模型的一种,最重要的一种)
从用户观点看关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。
- 关系(Relation):一个关系对应通常说的一张表。
- 元组(Tuple):表中的一行即为一个元组。
- 属性(Attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。
- 码(Key):表中的某个属性组,它可以唯一确定一个元组。
- 域(Domain):一组具有相同数据类型的值的集合。属性的取值范围来自某个域。
- 分量:元组中的一个属性值。
- 关系模式:对关系的描述,一般表示为
关系名(属性1,属性2,…,属性n)
学生(学号,姓名,年龄,性别,系,年级)
关系模式最基本的规范条件:关系的每一个分量必须是一个不可分的数据项。
关系模型的数据操纵:查询、插入、删除、更新。数据操作是集合操作,操作对象和操作结果都是关系(若干元组的集合)
完整性约束:实体完整性、参照完整性和用户定义的完整性
关系模型的优缺点
建立在严格的数学概念的基础上
关系模型的概念单一。无论实体还是实体之间的联系都用关系来表示。对数据的检索和更新结果也是关系。
关系模型的存取路径对用户隐藏,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
缺点:存取路径对用户隐藏,查询效率往往不如格式化数据模型。
数据库系统
从数据库管理系统角度看,数据库系统通常采用三级模式结构:数据库系统由外模式、模式和内模式三级构成。
数据库系统模式的概念
型(Type)对某一类数据的结构和属性的说明
值(Value)是型的一个具体赋值
模式(Schema)
- 数据库逻辑结构和特征的描述
- 是型的描述
- 反映的是数据的结构及其联系
- 模式是相对稳定的
模式的一个实例(Instance)
- 模式的一个具体值
- 反映数据库某一时刻的状态
- 同一个模式可以有很多实例
- 实例随数据库中的数据的更新而变动
数据库系统的三级模式结构
模式:也称逻辑模式,数据库中全体数据的逻辑结构和特征的描述,所有用户的公共数据视图。一个数据库只有一个模式。是数据库系统模式结构的中间层
外模式(External Schema):也称子模式或用户模式,数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。介于模式与应用之间
内模式(internal Schema):也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。一个数据库只有一个内模式
1、外模式/模式映象
定义外模式与模式之间的对应关系每一个外模式都对应一个外模式/模式映象
保证数据的逻辑独立性
当模式改变时,数据库管理员修改有关的外模式/模式映象,使外模式保持不变
应用程序是依据数据的外模式编写的,从而应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
2、模式/内模式映象
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。数据库中模式/内模式映象是唯一的
保证数据的物理独立性
当数据库的存储结构改变了(例如选用了另一种存储结构),数据库管理员修改模式/内模式映象,使模式保持不变。应用程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性
关系数据库
- 域:是一组具有相同数据类型的值的集合。
- 笛卡儿积:给定一组域D1、D2、…、Dn,这些域中可以有相同的。 D1、D2、…、Dn的笛卡尔积为:
D1×D2×…×Dn ={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
其中每一个元素( d1,d2,…,dn )叫作一个n元组或简称元组
元素中的每一个值di叫作一个分量
一个域允许的不同取值个数称为这个域的基数
- D1×D2×…×Dn基数M为 M= (各个域基数的乘积)
- 笛卡尔积可表示为一个二维表。表中的每行对应一个元组,表中的每列对应一个域。
关系:D1×D2×…×Dn 的子集叫做在域 D1,D2,…,Dn上的关系(Relation) ,表示为:
R(D1, D2 …, Dn)
R是关系名,n为关系的目。
关系是笛卡尔积的有限子集,所以关系也是一个二维表。
若关系中的某一个或多个属性的集合能唯一地标识一个元组,则称该属性或属性组为超码。
如果构成超码属性组的任意真子集都不能成为超码,这样的最小超码称为候选码。
若一个关系有多个候选码,则选定其中一个为主码。候选码的诸属性称为主属性。
不包含在任何候选码中的属性称为非主属性或非码属性
关系可以有三种类型:
基本关系(基本表或基表)
实际存在的表,是实际存储数据的逻辑表示
查询表:查询结果对应的表
视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
基本关系具有的性质
① 列是同质的,每一列中的分量是同一类型的数据,来自同一个域。
② 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名。
③ 列的顺序无所谓,列的次序可以任意交换。
④ 任意两个元组的候选码不能相同。
⑤ 行的顺序无所谓,行的次序可以任意交换。
⑥ 分量必须取原子值,每一个分量都必须是不可分的数据项。
关系模式
定义:关系的描述称为关系模式。它可以形式化地表示为:
R(U,D,dom,F)
其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,dom为属性向域的映象集合,F为属性间数据的依赖关系集合。
关系模式简记为
R(U)或R(A1,A2,…,An)
其中R为关系名, A1,A2,…,An为属性名。而域名及属性向域的映象常常直接说明为属性的类型、长度。
关系模式是型,关系是值
关系模型中三类完整性约束:
实体完整性:若属性A是基本关系R的主属性,则属性A不能取空值。
参照完整性:若属性F是基本关系R的外码,它与基本关系S的主码Ks相对应,则对于R中每个元组在F上的值必须为:或者取空值 或者等于S中某个元组的主码值
用户定义的完整性
实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。
SQL数据定义
一、定义基本表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[<列级完整性约束条件>] ] …
[,<表级完整性约束条件> ] )
Primary key (Sno, Cno),
Foreign key (sno) references S(sno),
常用完整性约束
实体完整性约束:PRIMARY KEY
参照完整性约束:FOREIGN KEY
用户自定义的完整性约束:
CHECK约束check(grade>=0 and grade<=100),
唯一性约束(UNIQUE) 非空值约束(NOT NULL)
二、修改基本表
ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ] ALTER TABLE S DROP CONSTRAINTS 约束名;
Alter Table S drop column Scome;
[ MODIFY <数据类型> ];ALTER TABLE S MODIFY Sname Char(20);
三、删除基本表
语句格式:
DROP TABLE <表名>
索引
- 创建索引的方法可以分为直接方法和间接方法
- 直接创建索引的方法就是使用CREATE INDEX语句直接创建
- 间接创建索引就是通过创建其他对象而附加创建了索引,例如在表中定义主键约束或唯一约束时,同时也创建了索引。
建立索引
CREATE [UNIQUE|BITMAP] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
- 用<次序>指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
- UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
- BITMAP表示要建立的索引是位图索引,位图索引主要用来节省空间,减少ORACLE对数据块的访问。在OLAP(数据分析处理)中应用位图索引有优势。
删除索引
DROP INDEX <索引名>;
查询
语句格式
SELECT [ALL|DISTINCT] <目标列表达式> [别名][,<目标列表达式>[别名]] …
FROM <表名或视图名>[别名][, <表名或视图名>[别名] ] …
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];(缺省即为asc升序)
WHERE子句常用的查询条件
查询条件 | 谓词 |
比较 | =,>,<,>=,<=,!=,<>,!>,!<;not+上述比较运算符 |
确定范围 | Between and,not between and |
确定集合 | In,not in |
字符匹配 | Like,not like |
空值 | Is null,is not null |
多重条件 | And,or,not |
字符串匹配
谓词Like可以用来进行字符串的匹配。格式如下:
[NOT] LIKE <匹配串> [ESCAPE <换码字符>]
通配符
- % (百分号) 代表任意长度(长度可以为0)的字符串
- 例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串
- _ (下横线) 代表任意单个字符
- 例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串
ESCAPE 短语:当用户要查询的字符串本身就含有 % 或 _ 时,要使用ESCAPE '<换码字符>' 短语对通配符进行转义
WHERE Cname LIKE 'DB\_%i_ _' ESCAPE '\'; \后的字符_不再具有通配符的含义,专义为普通的_字符
聚集函数
5类主要集函数
- 计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>)
- 计算总和
SUM([DISTINCT|ALL] <列名>)
- 计算平均值
AVG([DISTINCT|ALL] <列名>)
求最大值MAX([DISTINCT|ALL] <列名>)
求最小值MIN([DISTINCT|ALL] <列名>)
DISTINCT短语:在计算时要取消指定列中的重复值
ALL短语:不取消重复值(all为默认值)
Where语句中不能用聚集函数作为条件表达式
连接查询:略
嵌套查询:略
Any,all谓词:any 某个 all 所有 <any 小于最大值 \<all 小于最小值
EXISTS谓词(p110)
带有EXISTS谓词的查询中,子查询不返回任何数据,只产生逻辑真值"True"或逻辑假值"False"。
集合操作种类
并操作(UNION)
交操作(INTERSECT)
差操作(EXCEPT)
基于派生表的查询
子查询不仅可以出现在where子句中,还可以出现在from子句中,这时子查询生成的临时派生表成为主查询的查询对象。
SELECT Sno,Cno
FROM SC,
(SELECT Sno avg_sno,Avg(Grade) avg_grade FROM SC GROUP BY Sno) Avg_sc
WHERE SC.Sno=Avg_sc.avg_sno and SC.Grade>=Avg_sc.avg_grade
数据更新
一.插入数据
1. 插入单个元组
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2> … )
2. 插入子查询结果
语句格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
二.修改数据
- 语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
Extract 抽取
EXTRACT(YEAR FROM sysdate)-EXTRACT(YEAR FROM birth) 计算年龄
三.删除数据
DELETE
FROM <表名>
[WHERE <条件>];
视图
定义视图
语句格式
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <子查询>
[WITH CHECK OPTION];
- DBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。
- With Check Option表示对视图进行Update、Insert和Delete操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)
删除视图语句格式:
DROP VIEW <视图名>;
视图查询
DBMS实现视图查询的方法
视图消解法(View Resolution)
- 进行有效性检查,检查查询的表、视图等是否存在。如果存在,则从数据字典中取出视图的定义
- 把视图定义中的子查询与用户的查询结合起来,转换成等价的对基本表的查询
- 执行修正后的查询
更新视图
DBMS实现视图更新的方法:视图消解法(View Resolution)
指定WITH CHECK OPTION子句后,DBMS在更新视图时会进行检查,防止用户通过视图对不属于视图范围内的基本表数据进行更新
更新视图的限制
一些视图是不可更新的,因为对这些视图的更新不能唯一地有意义地转换成对相应基本表的更新
数据库安全性
Oracle用户是Oracle数据库中的重要概念,与用户密切相关的另一个概念就是模式(schema)。
用户主要连接数据库和访问数据库对象,用户是用来连接数据库和访问数据库。
模式是数据库对象的集合。模式对象是数据库数据的逻辑结构,把数据库对象用模式分开成不同的逻辑结构。
用户是用来连接数据库对象。而模式是用来创建和管理对象的。模式跟用户在oracle数据库中是一对一的关系。
一个用户一般对应一个模式,该用户的模式名等于用户名,并作为该用户的缺省模式。
权限管理
Oracle有两种类型的权限:系统权限和对象权限。
授予系统权限
grant { 系统权限 | 角色 } [, { 系统权限 | 角色 } ]…
To { 用户 | 角色 | public} [, { 用户 | 角色 | public}] …
[with admin option]
回收系统权限:
revoke { 系统权限 | 角色 } [, { 系统权限 | 角色 } ]…
from { 用户 | 角色 | public} [, { 用户 | 角色 | public}]
对象权限:允许用户访问一个特定对象并对特定对象执行特定操作所需要的权限称为对象权限。
授予对象权限:
grant { 对象权限 [,对象权限 ]…| all [ privileges ]}
on [模式.] 对象名
to { 用户 | 角色 | public} [, { 用户 | 角色 | public}] …
[with grant option]
- 对象权限例子:UPDATE(Sno),UPDATE
回收对象权限:
revoke { 对象权限 [,对象权限 ]…| all [ privileges ]}
on [模式.] 对象名
from { 用户 | 角色 | public} [, { 用户 | 角色 | public}] …
[cascade constraints]
角色管理
角色将用户权限归为一组,对权限进行组管理,
角色是一组权限的集合。
如果将一个角色授予一个用户,意味着这个用户拥有这个角色内的所有权限。
数据库建立时,Oracle会自动创建一些角色,称为预定义角色。
Connect:连接数据库,建立聚集、数据库链路、序列、同义词、视图等
Resource:建立聚集、数据库链路、序列、同义词、表、触发器等数据库对象
DBA:所有系统权限
- 创建角色语句格式:
Create role 角色名
[not indentified | identified { by 口令 | externally | globally}]
- 修改角色语句格式:
Alter role 角色名
[not indentified | identified { by 口令 | externally | globally}]
删除角色语句格式:
Drop role 角色名
数据完整性
注意完整性约束条件与完整性约束条件名的区别
完整性约束命名子句
CONSTRAINT <完整性约束条件名>
[PRIMARY KEY短语
|FOREIGN KEY短语
|CHECK短语]
CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
CONSTRAINT StudentKey PRIMARY KEY(Sno)
修改表中的完整性限制
使用ALTER TABLE语句修改表中的完整性限制(可以先删除原来的约束条件,再增加新的约束条件)
ALTER TABLE S
DROP CONSTRAINT C1;
ALTER TABLE S
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999),
参照完整性违约处理
1. 拒绝(NO ACTION)执行
- 默认策略
2. 级联(CASCADE)操作
3. 设置为空值(SET-NULL)
FOREIGN KEY (Sno) REFERENCES S (Sno)
ON DELETE CASCADE
ON UPDATE CASCADE,