数据库复习-基础

开始仅仅是为了应付考试而写的笔记,后来发现数据库挺重要的,主要是忘的还快,写的一般,不过应付考试足够了,以后会慢慢完善。

1 绪论

1.1 数据库基本概念

1. 数据

描述事物的符号记录称为记录。

2. 数据库

顾名思义,是存放数据的仓库。具有较小的冗余度较高的数据独立性易扩展性,可以为各种用户共享。

总的来讲,数据库数据具有永久储存有组织可共享三个基本特点

数据库数据内部是结构化的,整体也是结构化的,数据之间是具有联系的

数据的共享性高、冗余度低且易扩展
数据独立性:物理独立性与逻辑独立性是指用户的应用程序与数据库中的数据的物理存储和逻辑结构是相互独立的

3. 数据库管理系统 DBMS

数据库管理系统是位于用户与操作系统之间的一层数据管理软件

  1. 数据定义功能:数据定义语言DDL
  2. 数据组织,储存和管理
  3. 数据操作功能 : 数据操纵语言 DML
  4. 数据库的事务管理和运行管理
  5. 数据库的建立和维护
  6. 其他
4. 数据库系统

数据库系统是有数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员组成的储存、管理、处理和维护数据的系统。

1.2 数据库管理技术的产生和发展

1.人工管理阶段

2.文件系统阶段

3.数据库系统阶段

1.3 数据模型

1. 概念模型

实体

属性

实体型:实体+属性

实体集:同一类型实体的集合,如:全体学生

联系

概念模型的表示方法:E-R图

实体用矩形、属性用椭圆、联系用菱形

2. 层次模型

​ 树形结构

3. 网状模型

​ 图结构

4. 关系模型

​ 关系模型就是一张二维表

​ 对关系的描述通常表示为:关系名(属性1,属性 2,属性3…)

1.4 数据库系统的结构

数据库系统的三级模式与两级映像

  • 模式:又称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。模式实际上是数据库数据在逻辑集上的视图,一个数据库只有一个模式。

    ​ 数据库管理系统提供模式数据定义语言(模式DDL)来严格定义模式

  • 外模式:外模式也称子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图是与某一应用有关的数据的逻辑表示。外模式是通常是模式的子集。一个数据库可以有多个外模式。外模式是数据库安全性的一个有力措施,每个用户只能看见和访问所对应的外模式中的数据,数据库中的其余数据是不可见的。

    ​ 数据库管理系统提供外模式数据定义语言(外模式DDL)来严格定义外模式

  • 内模式:内模式也称储存模式,一个数据库只有一个内模式,它是数据物理结构和储存方式的描述,是数据在数据库内部的组织方式。

  • 外模式/模式映像:当模式改变时,由数据库管理员对各个外模式/模式映像作出相应改变,可以使外模式保持不变,应用程序是依据数据的外模式编写的,从而应用程序不用修改,保证数据与程序的逻辑独立性,简称数据的逻辑独立性

  • 模式/内模式映像:数据库的储存结构改变时,由数据库管理员对模式/内模式映象作出相应改变,可以使模式保持不变,从应用程序也不用改变,保证数据与程序的物理独立性,简称数据的物理独立性

2 关系数据库

2.1 笛卡尔积

笛卡尔积是域(一组具有相同数据类型的值的集合称为域)上的集合运算

2.2 关系

关系是笛卡儿积的有一定意义的、有限的子集,所以关系也是一个二维表,表的每一行对应一个元组,表的每一列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个唯一的名字,称为属性(Attribute)。n目关系有n个属性。当n=1时,称该关系为单元关系,当n=2时,称该关系为二元关系

2.3 关系模式

关系的描述称为关系模式 (relation schema)。它可以形式化地表示为
R(U,D, DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。

2.4 关系代数

~~笔者能力有限,~~不再细述,具体请参照关系代数

传统的集合运算:并 U- 笛卡尔积 ×

专门的关系运算包括选择 σ、投影 Π、连接 **÷ **

3 SQL(结构化查询语言)

3.1 SQL特点

  1. 综合统一: SQL集数据查询、数据操作、数据定义、数据控制功能于一体,SQL可以独立完成数据库生命周期中的全部活动。
  2. 高度非过程化:用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
  3. 面向集合的操作方式:SQL采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
  4. 以同一种语法结构提供两种使用方式:SQL既是独立的语言,又是嵌入式语言。作为独立的语言,它能够独立地用于联机交互的使用方式,用户可以在终端键盘上直接输入SQL命令对数据库进行操作。作为嵌入式语言,SQL语句能够嵌入到高级语言(如C、C#、JAVA)程序中,供程序员设计程序时使用。而在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供两种不同的操作方式,为用户提供了极大的灵活性与方便性。
  5. 语言简洁,易学易用:SQL功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL语言语法简单,接近英语口语,因此容易学习,也容易使用。

3.2 数据定义

操 作 对 象创 建删 除修 改
数据库CREATE DATABASEDROP DATABASE
模式CREATE SCHEMADROP SCHEMA
CREATE TABLEDROP TABLEALTER TABLE
视 图CREATE VIEWDROP VIEW
索 引CREATE INDEXDROP INDEXALTER INDEX
3.2.1 数据库

创建数据库

CREATE DATABASE <数据库名>

删除数据库

DROP DATABASE <数据库名>
3.2.2 模式

1.定义模式

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

如果没有指定<模式名> 那么 <模式名> 隐含为 <用户名>

例如:为用户ZHANG创建一个模式TEST,并且在其中定义一个表TAB1。

CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1 (COL1 SMALLINT,
					COL2 INT,
					COL3 CHAR(20),
					COL4 NUMERIC(10,3),
					COL5 DECIMAL(5,2)
					);

2.删除模式

DROP SCHEMA <模式名><CASCADE|RESTRICT>;

其中CASCADERESTRICT 两者必选其一。选择了CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有下属的对象时才能执行DROP SCHEMA语句。

3.2.3 表

修改基本表:(注:[ ] 表示里面的内容可以省略)

1.创建表----->点击跳转

2.删除表

drop table 表名 [CASCADE|RESTRICT]

3.添加列

alter table 表名 add column 新列名 列类型 [完整性约束] 

4.修改列名

alter table 表名 rename column 原列名 to 新列名

5.修改列类型

alter table 表名 modify 列名 列数据类型

6.删除列

alter table 表名 drop column 列名
3.2.4 视图

视图简单来说就是一个已经查询完成了的select语句

CREATE VIEW 视图名[列1,列2...]
as <select 子查询>
[WITH CHECK OPTION]

with check option 的作用在于,更新视图时,会自动判断当前更新的值是否满足select子查询中的条件

3.2.5 索引

1.索引能干什么?

​ 简单来说,索引建立在一张待查询的表上,表的访问次数越高,越需要建立索引,因为建立索引可以加快查询速度。具体的原理请点击这里

2.建立索引

CREATE [UNIQUE][CLUSTER] INDEX 索引名 ON 表名(列名1 [次序], 列名2 [次序]....

UNIQUE 指定索引列中值必须是唯一的

CLUSTER 表示建立的是聚簇索引 由于聚簇索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚簇索引。

例如:

CREATE UNIQUE INDEX Stusno ON Student(Sno ASC) Sno升序(默认为ASC)
CREATE UNIQUE INDEX Coucno ON Course(Cno DESC) Cno降序
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC) Sno升序和Cno降序

3.修改索引

alter index 索引名 rename to 新索引名

4.删除索引

drop index 索引名

3.3 数据查询

这里建议自己翻书

1. SELECT 语句

select查询的结果一定是一张二维表

select语句一般格式为:

字段列表     select [all|distinst] 目标列 
表链接       from  表名|视图名|(SELECT子句 [as] 别名)
行筛选       where 条件表达式
分组依据     group by 列名1 [having 表达式] 
排序依据     order by 列名2 [asc|desc]

很多人开始会有点分不清 group order where 这些语句的顺序,往往凭自己的感觉或者奇怪的”逻辑“写,结果也往往是错的,其实只要记住一点:只要是出现了的关键字,就按照上述顺序写。(懂的都懂/手动狗头)

2. WHERE子句

  1. null

    有时候不长记性,会写成where xxx=null 正确的写法应该是 where xxx is null

  2. like字符匹配

    %代表任意长度的字符串(可以是0)a%b可以是ab| asdb | addddb

    _(下划线)表示任意单个字符 a%b 可以是acb | abb | ajb 不能是 ab | accb

    如:

    select *from student
    where sname like '张%'
    或 where sname like '_晨%'
    

    如果like 查询的字符串中本身就含有% 或 _ ,使用ESCAPE ‘<换码字符>’

    如 查询 DB_ k开头的且倒数第三个字符是 i 的课程

    select *from course
    where like 'DB\_k%i_ _' ESCAPE'\'
    
3. ORDER BY子句
select *from student where class='1' 
order by sno desc
4. 聚集函数

注意:聚集函数只能放在select 子句以及Group by 的 having 中

函数说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列之和
5. GROUP BY子句

例如 求各个课程号及相应的选课人数

SELECT Cno,COUNT(Sno) FROM sc
GROUP BY Cno

将查询结果按 Cno 的值分组,所有具有相同 Cno 的元组为一组,然后对每一组作用聚集函数进行统计。

6.其他重点

连接查询:自身连接、外连接、多表连接

嵌套查询:IN ANY ALL EXISTS谓词

派生表(不考,但很有用)

3.4 数据更新

1.插入数据

insert into 表名 [列1,列2....]
values ('数据1','数据2'....)

还可以插入子查询

insert into 表名 [列1,列2...]
子查询

2.修改数据

update 表名 set 修改列=修改值
[where 条件]

UPDATE SC SET Grade=Grade+1  使每个学生的成绩加1

3.删除数据

delete 删除的是符合条件的元组,而非某一个数据

delete from 表名
[where 条件]

4. 安全性

4.1 数据库不安全因素

  • 非授权用户对数据库的恶意存取和破坏
  • 数据库中重要或敏感的数据被泄露
  • 安全环境的脆弱性

4.2 数据库安全性控制常用方法

  • 用户身份鉴别:静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别

  • 存取控制:

    ​ 存取控制机制组成:1.定义用户权限 2.合法权限检查
    ​ 用户权限定义和合法权检查机制一起组成了DBMS的安全子系统

  • 视图机制

  • 审计

  • 数据加密

4.3 授权与回收

对象类型对象操 作 类 型
数据库模式模式CREATE SCHEMA
基本表CREATE TABLE,ALTER TABLE
视图CREATE VIEW
索引CREATE INDEX
数据基本表和视图SELECT,INSERT,UPDATE,DELETE,REFERENCES,ALL PRIVILEGES
属性列SELECT,INSERT,UPDATE, REFERENCES,ALL PRIVILEGES
1. GRANT
GRANT 权限1,权限2
on 对象类型1 对象名1 ,对象类型2  对象名2.....
to 用户1,用户2....
[WITH GRANT OPTION]

指定 WITH GRANT OPTION 子句可以再授予,没有指定,不能传播。

2. revoke
REVOKE 权限1,权限2....
ON 对象类型1 对象名1 ,对象类型2  对象名2.....
FROM 用户1,用户2....
3.数据库角色

角色是一系列权限的集合,而用户是一系列角色和权限的集合

创建角色:

CREATE ROLE 角色名
4.自主存取控制缺点
  • 可能存在数据的“无意泄露”
  • 原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记
  • 解决:对系统控制下的所有主客体实施强制存取控制策略
5.强制存取控制规则

**1.**敏感度标记、绝密( Top Secret)机密 ( Secret)可信( Confidential )公开 ( Public )

TS>=S>=C>=p

**2.**主体的敏感度标记称为许可证级别( Clearance Level ) 客体的敏感度标记称为密级( Classification Level )

(1)仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体
(2)仅当主体的许可证级别小于等于客体的密级时,该主体才能写相应的客体

**3.**规则(1)的意义是明显的,规则(2)需要解释一下:

按照规则(2),用户可以为写入的数据对象 赋予高于自己的许可证级别的密级,这样一旦数据被写入,该用户自己也不能再读取该数据了,如果违反了规则(2)就有可能把数据的密级从高流向低造成数据的泄露。

**4.**强制存取控制是对数据本身进行密级标记,无论数据如何复制,标记与数据是一个不可分割的整体,只有符合密级标记要求的用户才可以操作数据,从而提供了更高级别的安全性

6.视图机制

把要保密的数据对无权存取这些数据的用户隐藏起来,对数据提供一定程度的安全保护
主要功能是提供数据独立性,无法完全满足要求·间接实现了支持存取谓词的用户权限定义

7.审计

审计日志( Audit Log ):将用户对数据库的所有操作记录在上面

DBA利用审计日志:找出非法存取数据的人﹑时间和内容·

8.加密

5.完整性

数据库的完整性是指数据的正确性相容性

1.实体完整性定义

CREATE TABLE中用PRIMARY KEY定义

实体完整性检查和违约处理

插入或对主码列进行更新操作时,程序会按照实体完整性规则自动进行检查·包括:
1.检查主码值是否唯一,如果不唯一则拒绝插入或修改
2.检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

2. 参照完整性定义

在 create table 中用 foreign key 短语定义哪些列为外码
用 references 短语指明这些外码参照哪些表的主码

参照完整性检查和违约处理

1.拒绝(NO ACTION)执行 默认策略
2.级联(CASCADE)操作
3.设置为空值( SET-NULL )
对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值

3. 用户定义的完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求

  • not null
  • unique
  • check

违约则拒绝操作

在CREATE TABLE时可以用CHECK短语定义元组上的约束条件,即元组级的限制
同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件

4. 完整性约束命名字句

constraint <完整性约束条件名><完整性约束条件>
<完整性约束条件>包括not null、unique、primary key、foreign key、check短语等
-- 删除约束性条件
ALTER TABLE Student 
	DROP CONSTRAINT C4;
-- 增加约束性条件
AlTER TABLE Student
	ADD CONSTRAINT C1 CHECK (SNO BETWEEN 9000 AND 9999);

6.关系数据库理论

7.数据库设计

(网上和书上介绍的十分详细,这里就不再具体叙述了)

1.需求分析

简单说,就是分析用户的要求
是整个设计过程的基础,是最困难﹑最耗费时间的一步,是整个数据库设计的关键

1.数据字典
  1. 数据项 数据项是不可再分的数据单位
  2. 数据结构 数据结构反映了数据之间的组合关系
  3. 数据流 数据流是数据结构在系统内传输的路径
  4. 数据存储 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
  5. 处理过程 具体处理逻辑一般用判定表或判定树来描述

2.概念结构设计

  1. 概念模型 必考

  2. E-R图 必考

3.逻辑结构设计

4.物理结构设计

5.数据库实施

6.数据库运行和维护

8.查询处理和优化

1.查询处理步骤

  1. 查询分析 语法检查

  2. 查询检查 语义分析,符号名转换,安全性、完整性检查

  3. 查询优化

    选择一个高效执行的查询处理策略查询优化分类
    代数优化: 指关系代数表达式的优化
    物理优化: 指存取路径和底层操作算法的选择

    选择优化的依据可以是基于规则的,也可以是基于代价的还可以是基于语义

  4. 查询执行

    代码生成器生成执行查询计划的代码,加以执行,并返回结果

2.实现查询操作

1.选择操作的实现 简单的全表扫描法 索引扫描法

2.连接操作的实现 a.嵌套循环算法 b.排序-合并算法 c.索引连接算法 d. hash join 算法

3.查询优化

查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好

在集中式数据库中执行开销主要包括: 磁盘存取块数(IO代价),处理机时间(CPU代价),以及查询的内存开销
分布式数据库还要加上通信代价
总代价=IO代价+CPU代价+内存代价+通信代价

计算查询代价时一般用I/O代价作为衡量,实际上系统选择的策略不一定是最优的,而是较优的

4.代数优化

通过对关系代数表达式的等价变换来提高查询效率

关于代数优化,教材上给出了5点规则:

  • 选择运算应尽可能先做
  • 把投影运算和选择运算同时进行
  • 把投影同其前或其后的双目运算结合起来
  • 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算
  • 找出公共子表达式

看不懂吧,我也看不懂

简单来说,只有一点:即提前做选择操作;在每个操作后,应做个投影操作,去掉不用的属性值 ,这样,无论后面要做连接还是交并差都是用最简的二维表

这里就不详细举例了,自己去试试吧

5.物理优化

物理优化就是要选择高效合理的操作算法或程序路径,求得优化的查询计划,达到查询优化的目标

选择的方法可以是基于规则的启发式优化基于代价估算的优化两者结合的优化方法

9.数据恢复

1.事务的基本概念

所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位

事务通常是以BEGIN TRANSACTION开始,以COMMITROLLBACK结束,

COMMIT表示提交,即提交事务的所有操作。说白了就是将数据写到磁盘上了,事务正常结束。

ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。

2、事务的ACID特性。

原子性:事务中的操作要么都做,要么都不做
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。当数据库只包含事务提交的结果时,数据库处一致性状态,即:事务全做或全不做,数据库就处于一致性状态,可见,一致性与原子性是密切相关的
隔离性:一个事物的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰
持续性:持续性也称永久性,一个事务一旦提交,它对数据库中数据的改变就应该是永久性的(其他操作不应该对其结果有任何影响)
可能破坏事务ACID特性的因素有:

  1. 多个事务并发运行时,不同事务的操作交叉执行
  2. 事务在运行过程中被强行停止

10.并发控制

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值