数据库复习

数据库系统原理理论复习

第1讲 数据库系统概述

• 基本概念

– 数据、数据项

数据(Data)

³ 定义:描述客观事物特征或性质的某种符号。

³ 描述事物的符号可以是数值,也可以是文字、图形、图像、声音、语言等多种形式,它们都可以经过数字化处理后存入计算机。

数据项(Item of Data)

³ 定义:数据的基本单元,即最小单位,它是某类客观事物的某个特征或性质的数据抽象。

³ 每个数据项都有一个名字(数据项名)和若干可能的取值(数据项值)。

– 记录型、数据记录

记录型

描述一类事物的若干特征或性质的数据项名的

集合,即数据结构

数据记录

按照记录型的规定描述一个事物的若干特征或性质的数据项值的集合。

– 数据的特性

数据的特性

³ 数据有“型”和“值”之分

³ 数据有定性表示和定量表示之分

³ 数据受数据类型和取值范围的约束

³ 数据具有载体和多种表现形式

– 信息、数据与信息的关系

信息(Information)

³ 定义1:客观事物之间相互联系、相互作用的运动状态和特征的抽象描述,是数据处理的结果,且仍以数据的形式表示出来。

³ 定义2:是有一定含义的,经过加工处理的,对决策有价值的数据。

³ 例:邮件(有用的邮件与垃圾邮件)

数据与信息的关系

³ 数据是信息的载体,信息是数据的内涵

³ 信息=数据+数据处理

³ 相对性

– 数据库、数据库管理系统、数据库系统

数据库(DataBase,简称DB)

³ 定义:长期存储在计算机内的、有组织的、可共享的数据集合,也是现实世界中相互关联的大量数据及数据间关系的集合。

数据库管理系统(DataBase Management System,简称DBMS)

常用的DBMS有:Oracle、MySQL、SQL Server、DB2、PostgreSQL、FoxPro、Access

³ 定义:是位于用户与操作系统(OS)之间的,使人们能对数据库中的数据进行科学地组织、高效地存取和维护管理的一种数据管理软件。

³ 它是基础软件,是一个大型复杂的软件系统。

³ 用途:科学地组织和存储数据、高效地获取和维护数据

– 数据的独立性(逻辑独立性和物理独立性)

• DBMS的主要功能

– 定义、操纵、控制、维护

数据库管理系统的主要功能

³数据库定义功能

³ 提供数据定义语言(DDL)

³ 定义数据库中的数据对象

³数据库操纵功能

³ 提供数据操纵语言(DML)

³ 实现对数据库的基本操作 (查询、插入、删除和修改)

数据库控制功能(运行管理)

³控制整个数据库系统的运行,包括数据安全性控制、完整性控制、并发

控制、存取控制等

数据库维护功能

³数据的装入与转换、数据库转储与恢复、数据库重组织以及性能监控等

功能

• 数据库技术的核心是数据处理

– 数据处理可分为数据计算和数据管理

数据管理

² 对数据进行分类、组织、编码、存储、检索和维护

² 是数据处理和数据分析的主要内容和核心部分

²   数据处理:是指对数据进行分析和加工的技术过程,包括对各种原始数据的分析、整理、计算、编辑等的加工和处理。

计算机数据管理

³ 是指利用计算机的软件、硬件对数据进行存储、检查、维护并实现对数据的各种运算和操作

• 数据管理的三个阶段及各阶段的特点

数据管理主要经历了三个阶段

³ 人工管理阶段(20世纪50年代中期以前)

计算机的主要应用领域是科学计算

主要特点

³ 数据不单独保存

³ 人工(程序员)管理数据

³ 数据不共享

³ 数据不具有独立性

³ 文件系统阶段(从20世纪50年代后期到60年代中期)

计算机不仅用于科学计算,还用于信息管理

主要特点

³ 数据可以长期保存

³ 文件的多样化和结构化

³ 文件系统管理数据

缺点

³ 数据冗余度大

³ 数据独立性差

³ 数据联系弱

³ 数据库系统阶段(从20世纪60年代后期至今)³ 高级数据库阶段(从20世纪80年代末开始)

数据管理的规模越来越大,数据量剧增

主要特点

³ 数据的整体结构化

³ 数据独立性高

³ 数据的共享性高,冗余度低,易扩充

³ 提供了完整的控制功能

数据管理3个阶段的比较

人工管理阶段 文件系统阶段 数据库系统阶段

应用背景  科学计算  科学计算、管理  大规模数据管理

硬件背景  无直接存取存储设备  磁盘、磁鼓  大容量磁盘、磁盘阵列

软件背景  无操作系统  有文件系统  有数据库管理系统

处理方式  批处理  联机实时处理,批处理  联机实时处理,分布处理,批处理

数据的管理者  用户(程序员)  文件系统  数据库管理系统

数据面向的对象  某一应用程序  某一应用  现实世界(一个企业、跨国公司)

数据的共享程度  无共享,冗余度极大  共享性差,冗余度大  共享性高,冗余度小

数据的独立性  不独立,完全依赖于程序  独立性差  具有高度的物理独立性一定的逻辑独立性

数据的结构化  无结构  记录内有结构,整体无结构  整体结构化,用数据模型描述

数据控制能力  应用程序自己控制  应用程序自己控制  由DBMS提供数据安全性、完整性、并发控制和恢复能力

• 数据库的特点

– 结构化、独立性、共享性、控制功能

数据的整体结构化

² 数据库的主要特征之一

³ 不再仅仅针对某一个应用,而是面向整个企业或组织

³ 不仅数据内部结构化,整体是结构化的,数据之间具有联系

³ 数据记录可以变长

³ 数据的最小存取单位是数据项

² 数据用数据模型描述,无需应用程序定义

数据独立性高

² 物理独立性

³ 指用户的应用程序与数据库中数据的物理存储是相互独立的。当数据的物理存储改变了,应用程序不用改变。

² 逻辑独立性

³ 指用户的应用程序与数据库的逻辑结构是相互独立的。数据的逻辑结构改变了,应用程序不用改变。

数据的共享性高,冗余度低且易扩充

² 数据面向整个系统,可以被多个用户、多个应用共享使用

² 数据共享的好处

³ 减少数据冗余,节约存储空间

³ 避免数据之间的不相容性与不一致性

³ 使系统易于扩充

提供了完整的控制功能

² 数据库管理系统提供的数据控制功能

³ 数据的安全性(Security)保护,保护数据以防止不合法的使用造成的数据的泄密和破坏。

³ 数据的完整性(Integrity)检查,保证数据的正确性、有效性和相容性。

³ 并发控制(Concurrency Control),对多用户的并发操作加以控制和协调,防止相互干扰而得到错误的结果。

³ 数据库恢复(Recovery),将数据库从错误状态恢复到某一已知的正确状态。

• 数据库系统的主要组成

– 数据库、数据库管理系统、应用程序、DBA

数据库系统(Data Base System,简称DBS)

³ 是指在计算机系统中引入数据库后的系统构成。

³ 在不引起混淆的情况下,常常把数据库系统简称为数据库。

数据库系统的组成

³硬件平台及数据库

³ 指中央处理器、内存储器、外存储器等完整的计算机硬件系统,在网络 环境中还包括服务器以及通信网络等硬件设施。

³ 数据库系统对硬件资源的要求

®  足够大的内存

®   足够的大的磁盘或磁盘阵列等外部设备

®   较高的通道能力,提高数据传送率

³软件

³ 数据库管理系统(DBMS)

³ 支持数据库管理系统运行的操作系统(OS)

³ 与数据库接口的高级语言及其编译系统(Java、PHP、Python等)

³ 以数据库管理系统为核心的应用开发工具(Visual Studio、Eclipse、Visual Code、IDEA等)

³ 为特定应用环境开发的数据库应用系统(APP)

³相关人员

³ 数据库管理员(DataBase Administrator,DBA)

® DBA是负责对数据库进行规划、设计、协调、维护和管理工作的人员。

³ 系统分析员和数据库设计人员

³ 应用程序员

³ 最终用户

³

数据库管理员DBA的职责

®    参与决定数据库中的信息内容和结构。

®   参与决定数据库的存储结构和存取策略。

®    参与确定数据的安全性要求和完整性约束条件。®

监控数据库的使用和运行。

®    数据库的改进和重组重构。

系统分析员

® 负责应用系统的需求分析和规范说明

® 与用户及数据库管理员结合,确定系统的硬软件配置® 参与数据库系统的概要设计。

数据库设计人员

® 参加用户需求调查和系统分析

® 确定数据库中的数据

® 设计数据库各级模式

应用程序员

® 设计和编写应用系统的程序模块® 进行调试和安装。

用户(User)

® 偶然用户

® 简单用户

® 复杂用户

• 数据库系统的三级模式

– 内模式、模式、外模式(子模式)

目的

³ ① 为了减少数据冗余,实现数据共享;

³ ② 为了提高存取效率,改善性能;

³ ③ 提高数据的逻辑独立性和物理独立性。

三级模式——三个层次的抽象

³ 是指数据库管理系统(DBMS)中存在的外模式(子模式)、(逻辑)模式和内模式,它是数据库管理系统(DBMS)对数据库中数据进行有效组织和管理的方法

模式(Schema)

也称结构模式或逻辑模式

是数据库中全体数据的逻辑结构和特征的描述,它与结构数据模

型对应

是所有用户的公共数据视图

模式是数据库系统模式结构的中心³

与数据的物理存储细节和硬件环境无关

与具体的应用程序、开发工具及高级程序设计语言无关

实例 (Instance)

³ 是模式的一个具体值——反映的是数据库某一时刻的状态

模式与实例的区别和联系

³ 区别

®   模式是型的描述,不涉及具体值;是相对稳定的

®   实例随数据库中数据的更新而变动

³ 联系

®   同一个模式可以有很多实例

定义模式

³ DBMS提供模式定义语言(Schema DDL,简称模式DDL)来严格地定义模式

®   DDL定义数据的逻辑结构,以某种数据模型为基础。数据记录由哪些数据项构成,数据项的名字、类型、取值范围等

®   定义数据之间的联系

®   定义与数据有关的安全性、完整性要求

一般,某个应用的数据库有一个模式

外模式(Extemal Schema)

³ 也称子模式(Subschema)或用户模式

³ 是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。

³ 是与某一具体应用有关的数据的逻辑结构和特征的描述。

外模式的用途

³ 每个用户只能看见和访问所对应的外模式中的数据,简化用户视图

³ 保证数据库安全性的一个有力措施

外模式与模式的关系

³ 外模式通常是模式的子集、一个模式可以有多个外模式

³ 反映了不同的用户的应用需求、看待数据的方式、对数据保密的

要求

³ 对模式中某一数据,在不同的外模式中结构、类型、长度、保密

级别等都可以不同

外模式与应用的关系

³ 一个外模式可以为多个应用系统所使用,一个应用程序只能使用

一个外模式

内模式(Internal Schema)

³ 也称存储模式(Storage Schema)

³ 是数据库物理结构和存储方式的描述

³ 是数据在数据库内部的表示方式

®   记录的存储方式(例如,顺序存储,堆存储,Cluster按hash方法存储等)

®   索引的组织方式(B+树,Bitmap,Hash)

®   数据是否压缩存储

®   数据是否加密

®   数据存储记录结构的规定—如定长/变长,记录是否可以跨页存放等

一个数据库只有一个内模式

说明:现在的DBMS产品基本上可以自动完成内模式的大部分定义工作,几乎不需要用户介入。当用户使用模式DDL定义模式的同时,DBMS也就自动完成了相应的内模式的定义工作。

• 数据库的二级映像(数据独立性)

– 外模式/模式、模式/内模式

数据库管理系统内部提供了二级映像

³外模式/模式映象

®  存在于外模式与模式之间,用于定义外模式与模式之间的对应关系。

®  映像定义通常包含在各外模式的描述中

®其目的是为了提高数据与程序之间的逻辑独立性,简称数据的逻辑独立性。

模式/内模式映象

®  存在于模式与内模式之间,用于定义内模式与模式之间的对应关系,即数据库全局逻辑结构与存储结构之间的对应关系

®  其目的是为了提高数据与程序之间的物理独立性,即数据的物理独立

性。映象定义通常包含在内模式描述中

• 三级模式与二级映像的优点

三级模式与二级映像的优点

³保证数据的独立性

®  除非应用需求本身发生变化,否则应用程序一般不需要修改。

³方便用户使用,简化用户接口

®  从程序为中心发展为以数据为中心,简化了应用程序的编制(用户无需

了解数据的存储结构)

®  大大减少了应用程序的维护和修改。³

保证数据库安全性的一个有力措施

®  利用外模式将数据库的其余数据与用户进行了隔离。

³有利于数据的共享性

®  同一个模式可以服务于多种应用。

³有利于从宏观上通俗地理解数据库系统的内部结构

第2讲 数据模型

• 基本概念

– 数据模型(数据库系统的核心)

² 数据模型(Data Model)

³ 是对现实世界客观事物的数据抽象描述,这种抽象描述能确切的反映事物、事物的特征和事物之间的联系,形成一组严格定义的概念的集合。

³ 通俗地讲,数据模型就是现实世界的模拟

– 关系模式、关系、属性、元组、候选键、外键、域、分量

• 数据模型的分类(根据抽象层次不同)

– 概念、逻辑、物理

® 概念数据模型(conceptual data model)

² 用户容易理解的、对现实世界特征的数据抽象。其基本特征是按用户观点对数据和信息进行建模,与具体的DBMS无关,用于数据库设计员与用户之间进行交流的语言。

² 常用的概念数据模型是实体–联系(E-R)模型,简称E-R模型。

® 结构数据模型(structural data model)

² 又称逻辑数据模型(Logical Data Model),是用户从数据库中所看到的数据模型,是具体的DBMS所支持的数据模型,如网状数据模型、层次数据模型、关系数据模型和面向对象数据模型等。

² 按计算机系统的观点对数据建模,用于DBMS实现

® 物理数据模型(physical data model)

² 是对数据最底层的抽象,用于描述数据在存储介质

上的表示方式和存取方法,它不但与具体的DBMS

有关,而且还与操作系统和硬件有关,是物理层次

的数据模型。

• 数据模型的三要素

– 数据结构、数据操作、完整性约束

³ 数据结构:是对计算机的数据组织方式和数据之间联系进行框架性描述的集合,是对数据库静态特性的描述。

³ 数据操作:是数据库中各种对象类的实例(或取值)所允许执行的操作的集合,是对数据库动态特性的描述。

³ 完整性约束:是关于数据状态和状态变化的一组完整性约束条件(规则)的集合。

• 概念数据模型

– E-R模型 △

• 实体、属性、联系(1:1、1:n、m:n)

² 实体-联系(E-R)模型的几个基本概念

³ 实体(entity):客观存在并可互相区别的事物。

例如:学生、课程、教学楼。

³ 属性(attribute):实体具有若干特征,每个特征称为实体的一个属性。

®    例如,每个学生实体都具有学号、姓名、年龄、性别、系别、年级等属性。

®    每个属性赋予确定的值,就抽象地表示了一个确定的实体。

实体型(entity type):对具有相同属性的一类实体的特征和性质的结构描述。

实体名(属性1,属性2,…,属性n)

例如,学生(学号,姓名,性别,年龄,系,入学时间)就是一个实体型。

实体集(entity set):同一类型实体的集合称为实体集。

®例如,计算机系的学生就是一个实体集。

关键字(Key):能唯一地标识实体集中每个实体的属性集合称为关键字(码)。

®例如,学号可以作为一个学校的学生实体集的关键字;一个实体集可以有若干个关键字,通常选择一个作为主关键字 (Primary Key)。

联系(Relationship):E-R模型中实体之间的联系,它反映的是现实世界中事物之间联系。

® 实体集内部的联系:是指同一实体集内部各实体之间的联系

® 实体集之间的联系:是指不同实体集之间的联系

® 例如:实体集内部:学生与学生的联系

®       实体集之间:学生与课程的联系

两个实体集之间的联系可以分为三类:

³ 一对一联系(1:1)

® 例:班级与班长,部门与经理

³ 一对多联系(1: n)

® 例:班主任与学生,部门与职工

³ 多对多联系(m:n)

® 例:学生与课程,客户与商品

E-R图要点

³ 实体(型)的表示

®   用矩形来表示实体(型),矩形框内写明实体名

³ 属性的表示

®   用椭圆形来表示属性,并用无向边将其与相应的实体连接起来

³ 联系的表示

®   用菱形来表示联系,菱形框内写明联系名,并用无向边将有关实体连接

起来,同时在无向边旁标上联系的类型( 1:1 、 1:n或m:n)

• 结构数据模型

– 数据库技术的发展

• 层次模型、网状模型、关系模型、面向对象模型

² 常用的结构数据模型(以数据结构的类型命名)

³   层次模型(Hierarchical Model)  (树)

² 满足下面两个条件的基本层次联系的集合为层次模型。

³ 有且只有一个结点没有双亲(Parent)结点,这个结点称为根结点;³ 除根结点以外的其他结点有且只有一个双亲结点与之相连。

² 层次模型的优点:

³ 模型比较简单,使用较方便。

³ 对于实体间联系固定且预先定义好的应用系统,层次模型性能优于关系模型,不低于网状模型。

³ 层次数据模型提供了良好的完整性支持。² 层次模型的缺点:

³ 只能表示1:n联系,虽有辅助手段实现m:n联系,但方法笨拙和复杂,不易掌握。

³ 数据的查询和更新操作也很复杂,导致应用程序编写困难。

³   网状模型(Network Model)    (有向图)

² 满足两个条件的基本层次联系的集合称为网状模型:³ 允许一个以上的结点无双亲;

³ 一个结点可以有两个或两个以上的双亲。

² 网状数据模型的优点:

³ · 能够更为直接地描述现实世界,如一个结点可以有多个双亲。³ ·    具有良好的性能,存取效率较高。

² 网状数据模型的缺点:

³ · 结构比较复杂,不利于最终用户掌握。

³ · 其DDL,DML语言复杂,用户不容易使用。³ ·

应用程序编写负担重。

³   关系模型(Relational Model)   (表格)

² 关系数据库系统采用关系模型作为数据的组织方式

² 1970年美国IBM公司San Jose研究室的研究员E.F.Codd首

次提出了数据库系统的关系模型

² 计算机厂商推出的数据库管理系统几乎都支持关系模型

² 关系模型的数据结构

³ 在用户观点下,关系模型中数据的逻辑结构是一张二维表(Table,简称表) 。其常用术语有:

® ① 关系模式(Relational Schema):对应一个二维表的表头,它对应E-R模型中的实体型,是相对稳定的。

® ② 属性(Attribute):二维表中的一列即为一个属性,给每一个属性起一个名称即属性名。它们与E-R模型中实体型的属性相同。

® ③ 关系(Relation):对应通常所说的一张二维表,它与E-R模型中的实体集对应。

® ④ 元组(Tuple):二维表中除表头以外的一非空行即为一个元组,元组与E-R模型中的实体对应。

® ⑤ 候选键(Candidate Key):二维表中的某些属性的集合,它可以唯一确定一个元组。一个关系可以有若干个候选键,通常选择一个作为主键(Primary Key)。它们分别与E-R模型中的关键字和主关键字对应。

® ⑥ 外键(Forgien Key):在一个关系中含有的与另一个关系的关键字相对应的属性(组)称为该关系的外部关键字。

® ⑦ 域(Domain);属性的取值范围。属性的域同E-R模型中属性的域意义相同。

® ⑧ 分量(Attribute Value):元组中一个属性所取的具体值。

³   关系模型的数据操作是集合操作,即操作的对象和操作的结果都用关系表示。

关系模型的完整性约束

³ 实体完整性

³ 参照完整性)——》关系的两个不变性

³ 用户定义的完整性

关系模型具有下列优点:

³ ① 关系模型建立在严格的数学理论基础上。

³ ② 关系模型的概念单一

® 无论实体还是实体之间的联系都用关系表示

³ ③ 关系模型的存取路径对用户透明

® 具有更高的数据独立性,更好的安全保密性® 简化了程序员的工作和数据库开发建立的工作

³ ④ 关系模型中的数据操作是集合操作® 操作的对象和操作的结果都用关系表示。

关系模型具有下列缺点:

³ ① 存取路径对用户透明,查询效率往往不如格式化数据模型³ ② 为提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度

³   面向对象模型(Object Oriented Model)

• 概念数据模型→关系数据模型的转换

– E-R图→关系模式

• 关系模型的完整性约束– 实体、参照、用户定义

• 关系数据模型的优点– 严格的数学理论基础– 概念单一

– 数据存取路径对用户是透明的,有更高的数据独立性、更好的数据安全性。

– 集合操作

  1. 关系数据模型

数据模型的三要素

³ 数据结构(静态特性)®

关系数据模型——关系

³ 数据操作(动态特性)

®   关系数据模型——关系操作³

完整性约束(制约与依存)

®   关系数据模型——三类完整性约束

• 基本概念

³域

³ 是一组具有相同数据类型的值的集合

³ 例如:

³   整数

³   实数

³   介于某个取值范围的整数

³   指定长度的字符串集合

³   {‘男’,‘女’}

– 笛卡尔积、广义笛卡尔积

笛卡尔积

³给定一组域D1,D2, …,Dn,且允许其中某些域是相同的, 定义D1,D2,…,Dn的笛卡尔积(Cartesian Product)为:

D1*D2**Dn={(d1,d2,…,dn) | di属于Di,i=l,2,…,n},

其中的每一个元素(d1,d2,…,dn)叫做一个n元组(n-tuple),元素中第i个值di叫做第i个分量。

– 关系(笛卡尔积的有一定意义、有限的子集)

关系

³ 笛卡尔积D1ÎD2Î…ÎDn的子集称为D1, D2, …, Dn上的一个关系(Relation)。域D1, D2, …, Dn是关系中元组的取值范围,称为关系的域(Domain),n称为关系的度(Degree)。

³ 关系可用R(D1, D2, …, Dn)表示,R是关系名

³ n=1,则为一元关系,n=2,则为二元关系,…

注意:

³ 按照笛卡尔积的定义,关系可以是一个无限集合。由于笛卡尔积不满足交换率,所以按照数学定律,(d1,d2,…,dn)≠(d2,d1,…,dn)。

当关系作为关系数据模型的数据结构时,需要给予限定和扩充:® 无限关系在数据库系统中无意义,因此,限定关系数据模型中的关系必须是有意义和有限的集合。

® 通过为关系的每个列附加一个属性名的方法取消了关系元素的有序性。即(d1,d2,…,dn) = (d2,d1,…,dn) 。因为元组之间的区别仅仅是其中属性值的区别。

关系的性质

³ 每一列中的值是同类型的数据,都来自同一个域。

³ 不同的列可以有相同的域,每一列称为一个属性,用属性名标识。

³ 元组中的每个分量是不可分的数据项

³ 关系中的各个元组是不同的,即不允许有重复的元组。³ 分量的次序是无关紧要的。

– 基数、度

基数(Cardinal number)

³ 若Di(i=1,2,…,n)为有限集,其包含的元素个数为mi(i=1,2,…,n),则D1ÎD2΅ΠDn包含的元素个数为

M=m1*m2**mn

M也称为基数。

– 候选键、联合键、全键、主键、外键

² 基本概念

³ 候选键:能唯一地标识出一个元组的属性或属性组。

技巧:关系中各元组对应分量的取值都不相同的分量组成候选键(排除关联属性)。

³ 联合键:两个或两个以上属性组成的候选键。

³ 全键:关系的全部属性构成关系的唯一候选键。

³ 主键:如果一个关系有多个候选键,可选择其中的一个候选键作为主键(Primary key)。

®   一个关系中只能有一个主键

³ 外键:关系R中的一组属性A不是关系R的主键,但A是另一个关系S的主键,则属性组A就是关系R的外键。

– 关系模式和关系的区别与联系

关系模式

³ 对一类实体特征的结构性描述,即对关系的结构性描述,该描述一般包括关系名、属性名、属性域的类型和长度,属性之间固有的依赖联系等。

³ 若U={A1, A2 …, An}为关系R的属性集,则关系模式简记为R(U)

或R(A1, A2, …, An)

关系模式和关系的区别和联系

³ 关系模式描述的是关系的静态结构信息,是对一个关系的“型”的描述,是相对固定的。关系是在关系模式约束之下的若干实体的集合,实体的数量是随时间变化的,但这种变化必定在关系模式的约束范围内。

– 并运算、交运算、差运算

– 选择运算、投影运算、连接运算、除法运算

– 象集

• 关系操作

– 查询操作(选择、投影、连接 、除、并、交、差等)

– 更新操作(增加、删除、修改等)

• 完整性约束

– 实体完整性  ³

是指对关系中的每一个元组,其主键属性对应的各个分量不能为空值(NULL)。

– 参照完整性    ³

设属性组A是关系R的外键,且A又是关系S的主键,则对于R中的每一个元组在属性组A上的值必须为:或者空值或者等于S中某一个元组的主键值。³ 参照完整性规则给出了关系之间建立联系的约束条件

关系模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持

– 用户定义完整性   ³

用户根据具体应用而针对某一具体数据附加的约束条件,也称为域完整性。

³ 域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中。

应用领域需要遵循的约束条件,体现了具体领域中的语义约束

• 关系代数 ☆

关系操作

³ 对关系进行操作,且其操作的对象和结果都是关系(集合)。

³ 主要有查询操作(选择、投影、连接 、除、并、交、差等)和更新操作(增加、删除、修改等)。

关系操作的表示方式

³

关系代数

®   用代数运算来表达关系的查询要求和条件

³ 关系演算

®   用谓词来表达关系的查询要求和条件

®   按照谓词变元的基本对象不同,可分为元组关系演算和域关系演算

表达能力完全等价是高度非过程化语言,是高级数据语言的基础

³ SQL(Structure Query Language)

®   是介于关系代数和关系演算之间的关系数据语言

² 关系代数是一种抽象的查询语言,是关系数据操作语言的

传统表达方式

² 关系代数的运算对象是关系,运算结果也是关系²

可分为两类:

³   传统的集合运算:并、交、差、笛卡尔积

² 传统的集合运算——二目运算

³ 并运算 (UNION)

® 设关系R和S是相容的,则它们的并是一个新的关系,它由属于R或属于S的所有元组构成。 记为 R∪S = {t | tÎR∨tÎS} 。

³ 交运算 (INTERSECT)

® 设关系R和S是相容的,则它们的交是一个新的关系,它由属于R同时也属于S的元组构成。 记为 R∩S= { t | tÎR∧tÎS } 。

³ 差运算 (EXCEPT)

® 设关系R和S是相容的,则它们的差是一个新的关系,它由属于R但不属于S的元组构成。 记为 R-S = {t | tÎR∧tÏS} 。

³ 广义笛卡尔积

® 设R为m元关系,S为n元关系,则R与S的广义笛卡尔积R×S是一个(m+n)元关系,其中的每个元组的前m个分量是R中的一个元组,后n个分量是S中的一个元组。若R有k1个元组,S有k2个元组,则R×S有(k1×k2)个元组,即广义笛卡尔积。记为:

R×S={(a1, a2, …, am, b1, b2, …, bn) | (a1, a2, …, am)ÎR∧(b1, b2, …, bn)ÎS}

³   专门的关系运算:投影、选择、连接、除法

选择运算(单目运算)

® 从关系R中选取满足给定条件的元组构成一个新的关系。选择运算记作:

σF(R) = { t | t ∈R∧F(t) }

其中σ(西格马)是选择运算符,F是限定条件的布尔表达式。由逻辑运算符∨、∧和┐等连接各个算术表达式组成。

算术表达式的基本形式为XθY,其中X,Y可以是属性名,常量或简单函数,算术比较运算符θ∈{,,,,,}。

投影运算(单目运算)

® 从一个关系R中选取所需要的列组成一个新关系。投影运算记为:

∏A(R) = ∏i1,i2,…,ik(R)= {t[A] | tR}

其中∏是投影运算符,A为关系R属性的子集,t[A]为R中元组相应于属性集A的分量,i1,i2,…,ik表示A中属性在关系R中的顺序号。

连接运算(二目运算)

从二个关系的广义笛卡尔积中选取满足一定连接条件的元组,记为: 

R ▷◁ S=σR.AθS.B(R×S)

R.AθS.B

其中▷◁是连接运算符,A、B分别为R、S上度数相等且可比较的属性集,q是算术比较符,R.AθS.B是连接条件(等值和非等值)。

两类常用的连接运算

® 自然连接:一种特殊的等值连接,它要求两个关系中进行比较的属性列必须是相同的属性组,并且在结果关系中把重复的属性列去掉。

® 若R和S的属性集合分别为AR和AS,它们具有相同的属性组A。令

B=AR∪AS,则自然连接可记作

R▷◁S=∏B(σR.A=S.A (R×S))

其中,是▷◁自然连接运算符。

除法运算(二目运算)

® 设关系R和S的度数分别为n和m(n>m>0),那么R÷S是一个度数为(n-m)的关系,它满足下列条件:

u R÷S中的每个元组t与S中每个元组u所组成的元组(t,u)必在关系R中, 即(t,u)ÎR。

u 为方便,假设关系S的属性为关系R中的后m个属性

象集

® 给定一个关系R(X,Z),X和Z为属性组,当t[X]=x时,x在R中的象集(Images Set)为:

Zx={ t[Z] | t ∈ R,t[X]=x }

它表示R中属性组X上值为x的元组在Z上分量的集合。

® 即从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量。

Z(σR.X=x (R))

除法运算(二目运算)

® 给定关系R(X,Y)和S(Y,Z),其中X、Y、Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:

R÷S={tr[X]|tr∈R∧∏y(S) 完全包含于 Yx}

其中,Yx为x在R中的象集,x= tr[X]

除法运算(二目运算)®

除法运算可以表示为

R÷S=∏X(R) - ∏X((∏X(R)×∏Y(S))-R)

® 特殊情况:S(Y)

R÷S=∏X(R) - ∏X((∏X(R)×S)-R)

– 选择运算

– 投影运算

– 连接运算

– 除运算

例题14:

检索学院号(Dno)为’11’的全体学生的学号

Sno ( σ Dno=‘11’ ( Students ) )

SELECT Sno FROM Students

WHERE Dno='11';

例题15:

查询选修了’大学英语Ⅰ’课程的学生姓名

Sname Cname=‘大学英语Ⅰ’ (Courses▷◁Reports▷◁Students))

SELECT Sname

FROM Courses C, Reports R, Students S WHERE C.Cno=R.Cno AND R.Sno=S.Sno

AND Cname='大学英语Ⅰ';

例题16

查询选修了’大学英语Ⅰ’课程的学生姓名

SELECT Sname FROM Reports R, Students S WHERE R.Sno=S.Sno AND Cno=

( SELECT Cno FROM Courses

WHERE Cname='大学英语Ⅰ' );

Sname(∏CnoCname='大学英语Ⅰ'( Courses)) ▷◁Reports

▷◁Students ) )

例题17

检索选修了所有课程的学生编号和姓名

Sno, Sname ( Students ▷◁( ∏Sno, Cno(Reports) ÷ ∏ Cno(Courses) ) )

例题18

³ 设一学号为2016115101的学生在2017学年第2学期选修了课程号为112p0098的课程且得分为68,将这些信息插入关系Reports中

Reports ∪ { ‘2016115101’, ‘112p0098’, 2017, 2, 85 }

例题19

³ 在关系Reports中删除学号为2016210102,选课为’计算机网络’

课程的元组

Reports - ( ∏Cno ( σCname=‘计算机网络’ ( Courses) ) ▷◁ σSno=‘2016210102’ ( Reports ) )

² 例:查询选修了112p0054号课程的学生姓名

³ SELECT S.Sname FROM Students S, Reports R WHERE

S.Sno=R.Sno AND R.Cno=‘112p0054’

³ 关系代数表达式

® Q1=∏Sname(σStudents.Sno=Reports.Sno∧Reports.Cno=‘112p0054’(Students×Reports))

® Q2=∏Sname(σReports.Cno=‘112p0054’(Students▷◁Reports))

® Q3=∏Sname(Students ▷◁σReports.Cno=‘112p0054’(Reports))

定义

³ 设E1和E2是两个关系代数表达式,若将相同的关系代替E1和E2中的相应的关系,所得到的结果关系完全一样,则称关系代数表达式E1和E2是等价的,或称E1和E2互为等价公式,记作E1≡E2 。

关系代数的等价公式³

笛卡尔积的等价公式

® E1×E2≡E2×E1交换律

® (E1×E2)×E3≡E1×(E2×E3) 结合律

连接运算的等价公式

® E1 ▷◁ E2≡E2 ▷◁ E1交换律

® E1 ▷◁F E2≡E2 ▷◁F E1交换律

® (E1 ▷◁ E2) ▷◁ E3≡E1 ▷◁(E2 ▷◁ E3) 结合律

® (E1 ▷◁F E2) ▷◁F E3≡E1 ▷◁F (E2 ▷◁F E3) 结合律

² 关系代数的等价公式

³ 投影运算串接的等价公式

® 设E是一个关系代数表达式,B1, B2, …, Bm是E中的某些属性名,Ai∈{B1,

B2, …, Bm} (i=1, 2, …, n≤m),则

  1. 数据库的设计与实施

² 主要任务——数据库设计的基础和起点

³ 通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。

³ 主要需求有:

® 信息需求

® 处理需求

® 安全性和完整性方面的需求

² 结束标记

³ 需求分析报告

主要设计步骤

³ 设计局部E-R模式

³ 合并局部E-R模式

³ 优化全局E-R模式

• 数据库规划

• 需求分析 ☆

• 概念结构设计

• 逻辑结构设计

关系模式的优化

³ 规范化处理

® 分析数据依赖

® 对数据依赖进行极小化处理,消除冗余的联系

® 确定各关系模式的范式

® 按照处理要求,对某些模式进行合并或分解

³ 模式的评价与修正

® 根据需求分析的结果,检查规范化后的关系模式集合是否满足用户的功

能要求

¯ 使用更符合用户习惯的别名

¯ 定义不同级别的视图¯ 简化用户对系统的使用

® 为了节省存储空间,可修正关系模式

• 物理结构设计

² 聚簇设计

² 索引设计

² 分区设计

² 确定系统配置参数

² 评价物理结构设计

• 数据库实施

² 数据库的建立

³ 数据库模式的建立

³ 数据加载

² 数据库的调整

³ 关系模式、视图、索引、磁盘分区等

² 应用程序编制与调试³ 使用模拟数据进行调试

• 数据库运行与维护

² 数据库系统的试运行

³ 功能测试

³ 性能测试

² 数据库系统的运行和维护

³ 数据库的转储和恢复

³ 维持数据库的完整性与安全性

³ 监测并改善数据库性能

³ 数据库的重组和重构(物理)

数据库应用系统的结构

单用户结构

³ 以单台微型计算机为其运行环境,是最简单的一种数据库应用系

统结构

³ 整个数据库系统都装在一台计算机上

³ 所有操作由一个用户独占完成

集中式结构

³ 一个主机带多个终端的多用户数据库应用系统结构(主从式数据

库系统结构)

³ 整个数据库系统都装在主机上

³ 主机操作系统多数是分时系统

³ 多个用户通过终端公共总线连在一起,并发地存取数据库,共享

数据资源

²二层客户机/服务器(C/S)结构

³ 应用系统的功能在客户机和服务器之间进行重新划分

³ 客户机主要负责应用逻辑的处理、用户界面的处理和显示,与服

务器连接

³ 服务器负责向客户机提供数据服务,实现数据管理和事务逻辑

²三层客户机/服务器(B/S)结构

³ 数据库应用系统分为三层:数据访问层、业务逻辑层和表示层³ 三个层次分别放在各自不同的硬件系统上,具有高灵活性,能适应客户及数据的增加和处理负荷的变动

® 数据访问层:数据管理、事务逻辑(数据库服务器)

® 业务逻辑层:应用逻辑(应用服务器)

® 表示层:表达逻辑(客户机)

  1. 关系模式的规范化设计理论

² 关系模式可能存在的异常

³ 冗余过多

® 如:学生的姓名、课程的名称有很多重复值

³ 插入异常

® 如:新增加的学生,如果还没有选课,将无法将信息插入到表中

³ 更新异常

® 如:许红霞老师上的课要转给其他教师上时,在更新时很容易出现错误

³ 删除异常

® 如:有一门课程因为选课人数不够,需要取消,则在删除该门课程的选课信息的同时,这门课程的信息(课程号,课程名)也将一并被删除;同样,如果一位教师退休,要删除该位教师的信息,则这位教师的相关授课信息也将被删除

异常原因分析

³根本原因

®   关系的结构。在关系模式的结构中,属性之间存在过多的“数据依赖

”。

³数据依赖

®   指一个关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。

³常见的数据依赖有

®   函数依赖

®   多值依赖

• 基本概念

– 函数依赖、完全(部分/传递)函数依赖

² 函数依赖的一般概念

³ 定义1

® 设R(U)是属性集U={A1, A2,…,An}上的关系模式,X和Y是U的子集。若对R(U)的任一具体关系r中的任意两个元组t1和t2,只要t1[X]=t2[X]就有t1[Y]=t2[Y],则称“X函数确定Y”或“Y函数依赖于X” (FounctionalDependence),记作X→Y。

® 小写字母r表示关系模式R(U)的对应的具体关系 (当前基本表的状态)® 注意:R(U)的一切具体关系r都要满足函数依赖的约束条件。

² 函数依赖的一般概念³ 几个常用的术语和记号

® 若X→Y,则称X为这个函数依赖的决定因素,简称X是决定因素。

® 若X→Y且Y→X,则称X与Y相互函数依赖,记作X<->Y。

® 若Y不函数依赖于X,则记作 X  —/ Y 。

® 若X→Y,但Y 全包含X,则称X→Y是平凡函数依赖。

® 若X→Y,但Y 不全包含 X ,则称X→Y是非平凡函数依赖。

² 函数依赖的一般概念

³ 定义2

® 设R(U)是属性集U={A1, A2, …, An}上的关系模式。X和Y是U的子集。

® ⑴ 如果X→Y,且对于X的任何一个真子集X’,都有X’/→Y ,则称Y对X完全函数依赖(Full Functional Dependence)或者X完全决定Y,记作:

f

X→Y

® ⑵ 如果X→Y,但Y不是完全函数依赖于X,则称Y对X部分函数依赖(Partial Founctional Dependence),记作:

p

X→Y

³ 定义3

® 对于关系模式R(U),设X、Y和Z都是U的子集。

如果X→Y,Y→Z,且Y/→X,Y 不全包含 X,Z 不全包含 Y,则称Z对X传递函数依赖(Transitive FounctionalDependence),记作:

t

X→Z

 

³ 定义5

® 对关系模式R(U),包含在任何一个候选键中的属性称为主属性(Primary Attribute),不包含在任何候选键中的属性称为非主属性(NonprimaryAttribute)或非码属性(Non-key Attribtute)。

³ 定义6

® 对关系模式R(U),设X Í U。若X不是R(U)的主键,但X是另一个关系模式的主键,则称X是R(U)的外键或外部关键字(Foreign key)。

– 主属性、非主属性

– 1~3NF、BCNF

• 函数依赖

– 会判断依赖关系

• 范式

² 范式(normal form)

³ 即正规公式,是符合某一种级别的关系模式的集合。

³ 满足不同程度要求的为不同范式。

³ 关系模式R满足第i范式要求,就可以写成R∈iNF

³ 对于各种范式,有

5NF⊂4NFBCNF⊂3NF⊂2NF⊂1NF

³ 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。

² 第一范式(1NF)

³ 定义7

® 如果一个关系模式R(U)的所有属性都是不可再分的基本数据项,则称

R(U)为第一范式,即R(U)∈1NF

³ 一般而言,每一个关系模式都必须满足1NF,这是对每一个关系最基本的要求。

³ 属性是否可以再分,取决于这个属性在实际问题中的重要程度。³ 但是,第一范式通常存在数据冗余过多、删除异常和插入异常等问题。

² 第二范式(2NF)

³ 定义8

® 若R(U)∈1NF,且每一个非主属性完全函数依赖于每个候选键,称R(U)为第二范式,即R(U)∈2NF。

³ 例

® 有关系模式R(U)=(Sno,Sdept,Sloc,Cno,Grade),候选键为(Sno,Cno)

³ 非2NF关系模式所引起的问题

® 插入异常

¯ 如:要插入一个学生Sno=‘20090101’, Sdept=‘cs’, Sloc=‘181-326’,该元组不能插入。

® 删除异常

¯ 如:某学生20090101只选一门C06号课,现在他不选了,则必须删除整个元组,学生的信息也丢失了。

® 修改复杂

¯ 如:某学生从计算机系cs转到数学系ma,则必须同时修改该生的住处,且若该生选修了n门课,则需修改多个元组中的值。

³ 非2NF关系模式的转换

® 方法:将关系模式进行分解。用投影分解把原关系模式R分解为两个或多个关系模式。

® 例如,上例可分解为:

¯ R1(Sno, Cno, Grade)

¯ R2(Sno, Sdept, Sloc)

³ 注意:将一个1NF的关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

® 例:新建的宿舍,还没有学生入住,则宿舍的信息就无法输入;某课程,没有学生选修,也无法输入。

第三范式(3NF)

³ 定义9

® 设关系模式R(U)∈2NF,且每一个非主属性不传递函数依赖于R(U)的候选键,则称R(U)为第三范式,即R(U)∈3NF。

³ 非3NF关系模式所引起的问题

® 插入异常、删除异常、冗余度大等问题

³ 非3NF关系模式的转换

® 模式分解

² 例题

³ 设有关系模式SCT(U)=(学号Sno,课程号Cno,教师姓名Tname),语义如下:(1)每位教师不重名; (2)每位教师仅上一门课; (3)每门课程可由若干教师讲授; (4)学生选定某门课程后,教师即唯一确定

³ 函数依赖集F如下:

³ F={(Sno,Cno)→Tname,(Sno,Tname)→ Cno,Tname→Cno}

BC范式(BCNF)

³ 由Boyce和Codd提出的,通常认为BCNF是修正的3NF。

³ 定义10

® 若关系模式R(U)∈1NF,对于R(U)的任意一个函数依赖X→Y,若Y C X,则X必含有候选键,那么称R(U)为BC范式,即R(U)∈BCNF。

® 若关系模式R(U)∈1NF,且R(U)的每个属性都不传递依赖于R的候选键,则称R(U)为BC范式,即R(U)∈BCNF。

若关系模式R(U)∈BCNF,则以下结论成立。

® R(U)的所有非主属性都完全函数依赖于每一个候选键,因此R(U)∈2NF。® R(U)的所有主属性都完全函数依赖于不包含它的候选键。

® R(U)中没有属性完全函数依赖于任何一组非候选键属性。

³ 定理1

® 若R(U)∈BCNF,则R(U) ∈ 3NF。³ 大多数情况下,3NF都是BCNF³ 3NF可能违反BCNF的两种情况

® 关系中包含两个(或更多)联合候选键

® 候选键有重叠,通常至少有一个重叠的属性® 例:(学号,课程号),(学号,教师姓名)

³ 定理2

® 如果R(U)∈3NF且R(U)有唯一候选键X,则必有R(U)∈BCNF

³ BCNF是在函数依赖条件下对模式分解所能达到的最高分离程度。

³ 3NF与BCNF的区别

® 对一个函数依赖A→B,3NF允许B是主属性,而A不是候选键。而BCNF则要求在这个依赖中,A必须是候选键。

® 当3NF消除了主属性对候选键的部分和传递函数依赖时,则成为BCNF。

多值依赖*

³ 定义11

® 设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y 多值依赖于X,记作X→→Y。

² 函数依赖的逻辑蕴涵

³ 定义12

³对于满足函数依赖集F的关系模式R(U,F)的任意一个具体关系r,若函数依赖X®Y都成立(即对于r中的任意两个元组t,s,若t[X]=s[X],则有t[Y]=s[Y]),则称F逻辑蕴涵X→Y,

³记为 F => X→Y

³ 注意:X→Y不一定属于F

³ 定义13

® 被函数依赖集F逻辑蕴涵的函数依赖所构成的集合,称为F的闭包(Closure),记作F+。即:

F+={X->Y | F=>X->Y}

³ 通常,F C F+。若F=F+,称F是函数依赖完备集。

² Armstrong公理系统

³ 设有关系模式R(U, F),F是只涉及到U中属性的函数依赖集。若X,Y,Z,W均是U的子集,则有以下推理规则:

® ⑴ 自反律 (Reflexivity Rule):如果Y C X C U,则X→Y成立,即F=>X→Y。

® ⑵ 增广律(Augmentation Rule):如果X→Y成立, 则XZ→YZ 成立(其中XZ是X∪Z的简单记法,其它类同),即若F=>X→Y,则F => XZ→YZ。

® ⑶ 传递律(Transitivity rule):如果X→Y,Y→Z成立,则X→Z成立,即若F=>X→Y,F=> Y→Z,则F=> X→Z

³ 定理3

® Armstrong公理系统中的推理规则⑴,⑵,⑶是正确的,即若X->Y由Armstrong公理导出,则X->Y属于F+

– 会判断关系满足第几范式

– 模式分解的方法

• 函数依赖推理规则

– Armstrong公理系统(3个推理规则)

– Armstrong公理系统的推论(3个推理规则)

– 函数依赖的闭包、属性的闭包

• 关系模式的分解特性*

第10讲 数据库的安全与保护

• 造成数据库的数据不正确,甚至被破坏的主要原因有

– 自然、更新、并发、故障

³ 自然的或人为的破坏

®   如火灾、计算机病毒或未被授权人有意篡改数据等

³ 对数据库数据的更新操作有误

®   如操作时输入的数据有误或存取数据库的应用程序有错等

³ 数据库的并发操作引起数据的不一致性

³ 数据库系统的软、硬件故障造成数据被破坏

• DB的安全和保护功能

² DBMS层所提供的数据库安全和保护功能:

³ 安全性(security)保护,即防止非法用户对数据库的非法使用,以

避免数据的泄露、篡改或破坏

³ 完整性(integrity)保护,即保证数据的正确性和一致性

³ 并发控制(concurrent control),即保证多用户能共享数据库,并

维护数据的一致性

³ 数据库恢复(database recovery),即在系统失效后的数据库恢复,配合定时备份数据库,使数据库不丢失数据。

– 安全性

– 完整性 ☆

– 并发控制 ☆

– 数据库恢复

• 安全性保护

– 用户鉴别、存取权限控制、视图机制、跟踪审查、数据加密存储

² 用户鉴别

³ DBMS鉴别一个用户是否为合法用户是DBMS提供的最外层安全性保护措施。

³ DBMS提供了一定的工具和命令,让DBA创建和定义合法用户,并对每个合法用户赋予一定的角色。

³ MySQL是一个多用户的数据库管理系统,它提供了功能强大的访问控制系统,以此来确保MySQL服务器的安全访问,即它可以为不同用户指定不同的访问权限,从而进一步减少数据泄露或被损坏的风险。

³ 登录MySQL服务器

® mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"

® –h hostname|hostIP ,指定连接的MySQL服务器主机名或是主机IP

® –P port ,指定访问的端口号,默认端口是3306

® –u username ,指定登录的用户名

® –p,指明需要输入登录密码

® DatabaseName,指明登录到哪个数据库中,默认直接登录到MySQL数据库

中,然后可使用USE命令来选择数据库

® –e “SQL语句”,登录MySQL服务器以后即可执行指定的SQL语句,然后退出MySQL服务器

³ 用户的种类

® root用户,超级管理员,拥有所有权限

® 普通用户,只能拥有被授予的权限

³ 查看用户信息

® SELECT user, host FROM mysql.user; #只有root才能查看

® SELECT USER(); #查看当前用户

® SELECT CURRENT_USER(); #查看当前用户

³ 创建用户

® CREATE USER [IF NOT EXISTS] <用户名> [IDENTIFIED BY '密码'][, <用

户名> [IDENTIFIED BY '密码'] ];

® 用户名,新建用户的账号,由用户(User)和主机名(Host)构成

® IDENTIFIED BY,指定明文密码值

® [, …],可同时创建多个用户

® 例:CREATE USER zhang3 IDENTIFIED BY '123123'; #默认Host是%

®     CREATE USER 'kangshifu'@'localhost' IDENTIFIED BY '123456';

%,意味着远程主机可以从任何其他服务器登录到MySQL服务器,localhost,意味着您只能从同一台计算机登录到MySQL服务器。

³ 修改用户名

® RENAME USER <old_user> TO <new_user> [, <old_user> TO <new_user>] ;

® 修改一个或多个已经存在的用户账号名称

® 例:RENAME USER zhang3 to li4;

® 例:UPDATE mysql.user SET USER='wang5' WHERE USER='li4';

FLUSH PRIVILEGES; #用于重新加载授权表(即 user 表),以使权限

或账户相关的更改立即生效

³ 删除用户

® DROP USER <user> [, <user>] ;

® 注:必须拥有DROP USER的权限

® 例:DROP USER 'kangshifu'@'localhost';

® 例:DELETE FROM mysql.user WHERE User='wang5' AND Host='%';

FLUSH PRIVILEGES;

® 注意:不推荐使用DELETE语句删除用户,系统会有残留信息保留

³ 修改当前用户密码

® ALTER USER USER() IDENTIFIED BY ‘新密码’;® 或者

® SET PASSWORD=‘新密码’; #使用root用户登录MySQL

³ 修改其它用户密码

® ALTER USER <user> IDENTIFIED BY ‘新密码’;® 或者

® SET PASSWORD FOR <user>=‘新密码’; #使用root用户登录MySQL

® 或者

® UPDATE MySQL.user …(不推荐)

存取权限控制

³ 权限级别

® 列权限(columns_priv):其和表中的一个具体列相关

® 表权限(tables_priv):其和一个具体表中的所有数据相关® 数据库权限(db):其和一个具体的数据库中的所有表相关® 用户权限(user):其和MySQL中所有的数据库相关

³ 授权粒度

® 是衡量授权机制是否灵活的一个重要指标

® 授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善,但数据字典会变得大而复杂,系统定义与检查权限的开销也会随之增大。

³ user表,是MySQL中非常重要的一个权限表(用户层权限)® 范围列:包括host字段、user字段和authentication_string字段。

® 权限列:决定了用户的权限,表示了在全局范围内允许对数据和数据库进行的操作。

® 安全列:都是和加密、标识用户、授权插件相关的字段。® 资源控制列:用来限制用户使用的资源。

³ user表,是MySQL中非常重要的一个权限表(用户层权限)

® host字段,表示连接类型

¯ %,表示所有远程通过TCP方式的连接

¯ IP地址,通过指定IP地址进行的TCP方式的连接

¯ 机器名,通过指定网络中的机器名进行的TCP方式的连接

¯ ::1,IPv6的本地IP地址,等同于IPv4的127.0.0.1

¯ localhost,本地方式通过命令行方式的连接

® user字段,表示用户名

¯ 同一用户通过不同方式连接的权限是不一样的

® authentication_string字段,密码

¯ 所有密码串通过password(明文字符串)生成的密文字符串

³ db表(数据库层权限)

® 用户列:包括host字段、user字段和db字段,表示从某个主机连接某个用户对某个数据库的操作权限。

® 权限列:决定了用户是否具有指定的权限。

tables_priv表(表层权限)

® 用户列:包括host字段、user字段、db字段和Table_name字段。® Grantor列:表示修改该记录的用户。

® Timestamp列:表示修改该记录的时间。

® Table_priv列: 表示对象的操作权限。包括Select、Insert、Update、Delete、Create、Drop、Grant、References、Index和Alter。

® Column_priv列:表示对表中的列的操作权限。包括Select、Insert、Update和References。

³ columns_priv表(字段层权限)

® 用户列:包括host字段、user字段、db字段、Table_name字段和Column_name字段。

® Timestamp列:表示修改该记录的时间。

® Column_priv列:表示对表中的列的操作权限。包括Select、Insert、Update和References。

³ procs_priv表,对存储过程和存储函数设置操作权限

® 用户列:包括host字段、user字段、db字段

® Routine_name列:存储过程名称

® Routine_type列:存储过程类型,存储过程or存储函数

® Grantor列:表示修改该记录的用户

® Timestamp列:表示修改该记录的时间。

® Proc_priv列:表示对存储过程的操作权限。包括Execute,Alter Routine,

Grant。

授予权限

GRANT priv_type[(column_list)] ON database.tableTO user[,user]…

[WITH GRANT OPTION];

³  例:将Students表中Sno字段、Sname字段的查询权限授予用户zhang3。

®  GRANT SELECT(Sno, Sname) ON jxdb.Students TO zhang3@localhost;

®  mysql -u zhang3@localhost -p jxdb;

®  SELECT Sno, Sname FROM Students WHERE Sno='2014112103';

®  SELECT Sno, Sname, Mno FROM Students WHERE Sno='2014112103';

ON database.table,ON后面跟的是该权限的适用对象

®全局权限,适用于一个给定服务器中的所有数据库,可用*.*表示。

®数据库权限,适用于一个给定数据库中的所有目标,可用database.*表示

®表权限,适用于一个具体表中的所有列,可用database.table表示

®列权限,适用于表中的具体列,此时在权限后面把具体列表示出来即可

撤销权限

REVOKE priv_type[(column_list)] ON database.tableFROM user[,user]…

³ 例:撤销用户zhang3查询Students表中Sname字段的权限,撤销用

户kangshifu的所有权限

REVOKE SELECT(Sname) ON jxdb.Students FROM zhang3@localhost;

REVOKE ALL,GRANT OPTION FROM kangshifu@localhost;

³ 创建角色

® CREATE ROLE 'role_name'[@'host_name'] [,…n];

® 例:

® CREATE ROLE 'manager'@'localhost’;³ 给角色赋予权限

® GRANT privileges ON table_name TO 'role_name'[@'host_name’];

³ SHOW PRIVILEGES;

³ 查看角色的权限

® SHOW GRANTS FOR 'role_name';³ 回收角色的权限

® REVOKE privileges ON table_name FROM 'role_name';® SHOW PRIVILEGES;

³ 删除角色

® DROP ROLE 'role_name’;

® 注意: 如果你删除了角色,那么用户也就失去了通过这个角色所获得的

所有权限

³ 给用户赋予角色

® 角色创建并授权后,要赋给用户并处于激活状态才能发挥作用

® ① 授权 GRANT rolename [, …n] TO username;® ② 激活 SET DEFAULT ROLE ALL TO username;

³ 撤销用户的角色

® REVOKE rolename FROM username;

² 视图机制

³ 通过视图机制可限制用户使用数据的范围,从而自动地对数据提供一定程度的安全保护。

³ 视图(外模式)

® 视图是查询结果的关系,是被存储的查询定义,视图的属性名由子查询确定

视图数据在物理上是不存在的

³ 视图的特点

® 虚拟表:是从一个或几个基本表(或视图)导出的表

® 只存放视图的定义(SELECT语句),不存放视图对应的数据。

® 基本表中数据发生变化,从视图中查询出的数据也随之改变

® 对应用程序来说,视图就相当一个表,数据可以从视图中查得,而且在权限许可的情况下,还可以通过视图来插入、更改和删除基本表中的数据

³ 定义视图的格式为:

CREATE VIEW <视图名> [(<列名>[,…n)]]

AS <SELECT子查询语句>[WITH CHECK OPTION]

³ 例5:建立学院号为12的学生的视图,并要求进行修改和插入操作时仍需保证该视图只有学院号为12的学生,视图的属性名为Sno, Sname, Sbirth, Dno, Mno

CREATE VIEW VIEW_StuInfo1

AS

SELECT Sno, Sname, Sbirth, Dno, MnoFROM Students S

WHERE Dno='12'

WITH CHECK OPTION

² 视图机制

³ 删除视图的语句格式为:DROP VIEW <视图名>

³ 说明:视图删除后视图的定义将从数据字典中删除。但是由该视图导出的其它视图定义仍在数据字典中,不过该视图已失效。用户使用时就会出错,要用DROP VIEW语句显式将它们一一删除

³ 更新视图

® 指通过视图来插入(INSERT)、删除(DELETE)和修改(UPDATE)数据。由于视图是不实际存储数据的虚拟表,因此对视图的更新,系统将自动转换为对基本表的更新。

® 在对视图的数据进行插入和修改的时候,和向基本表中插入数据一样,用户必须具有向基本表中插入数据的权限。如果视图上没有包括基本表中所有属性为NOT NULL的列,那么插入操作会因为那些列的值为NULL而失败。

³ 更新视图的限制

® 在一个基本表上建立的视图,只有包含基本表的主键才可以更新;® 一个视图最多只能有250个列;

® 不能在视图上建立触发器和索引;

® 对视图的一个更新语句只能影响一个基本表,所以由多表连接定义的视图不允许更新。

® 定义视图语句不能使用UNION操作符。

® 视图定义中用到GROUP BY子句或包含集合函数、计算列的数据不能修改。

³ 视图的优点

® 提供了一定的数据独立性。即使修改了基本表,通过建立视图,也可以

不改变应用程序

® 通过视图简化了应用程序和用户查询

® 不同的用户通过视图从不同的观点观察数据

® 视图作为授权的单位提高了系统的安全性

跟踪审查

³ 一种事后监视的安全性保护措施,它跟踪数据库的访问活动,以发现数据库的非法访问,达到安全防范的目的。

³ MySQL支持的日志

® 错误日志,记录MySQL服务器的启动、关闭、运行错误等信息

® 二进制日志,以二进制文件的形式记录数据库中的操作,但不记录查询

语句

® 通用查询日志,记录用户登录和记录查询的信息

® 慢查询日志,记录执行时间超过指定时间的操作

数据加密存储和传输

³ 商品化DBMS一般都提供了数据加密例行程序,可根据用户的要求自动对存储和传输的数据进行加密处理。即使未提供这种加密程序,一般也提供了接口,允许用户使用其它厂商推出的加密程序对数据加密。

³ 由于数据的加密与解密是比较费时的操作,而且数据加密与解密程序会占用大量系统资源,一般只对高度机密的数据加密。

• 完整性保护   保护数据的正确性、一致性、相容性

– 约束的分类

– 实现参照完整性需要考虑的几个问题

² 完整性和安全性的关系:它们是数据库保护的两个不同的方面。

³ 安全性是防止用户非法使用数据库,包括恶意破坏和越权存取数据,即防范的对象是非法用户和非法操作。

³ 完整性则是防止合法用户使用数据库时向数据库中加入不合语义的数据,即防范的对象是不合语义的数据。

² DBMS完整性控制应具有的功能:

³ 定义功能:为用户提供定义完整性约束条件的命令或工具。

³ 检查功能:能够自动检查用户发出的操作请求是否违背了完整性约束条件。

³ 保护功能:当发现用户的操作请求使数据违背了完整性约束条件时,能够自动采取一定的措施确保数据的完整性不遭破坏。

² 完整性约束的分类(根据执行约束的时机分)

³ 立即执行的约束:一条语句执行完成后立即检查的完整性约束条件;

³ 延迟执行的约束:延迟到整个事务执行结束后,正式提交前进行检查的完整性约束条件;

² 完整性约束的分类(根据控制的方法分):

³ 实体完整性约束:违反实体完整性的操作拒绝执行

³ 参照完整性约束:违反参照完整性的操作,一般不是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性

³ 用户定义的完整性约束:违反用户定义的完整性的操作拒绝执行

² 实现参照完整性控制需要考虑的几个问题

³ ⑴ 外键的空值问题。

³ ⑵ 被参照关系中删除元组的问题。

³ ⑶ 在参照关系中插入元组的问题。

³ ⑷ 元组中主键值的修改问题

² 实现参照完整性控制需要考虑的几个问题

³ ⑴ 外键的空值问题。

® 允许为空。

®例:新生的班级分配,职工的部门分配

® 不允许为空。

例:学生的选课信息,客户的购货清单

³ ⑵ 被参照关系中删除元组的问题。

当删除被参照关系中的某个元组,而参照关系中存在若干元组,其外键值与被参照关系删除元组的主键值相同时,有3种不同的处理策略:

® 级联删除(Cascades)“株连九族”

® 受限删除(Restricted)“上有老,下有小”

® 置空值删除(Nullifies)“恩断义绝”

³ ⑶ 在参照关系中插入元组的问题。

当在参照关系中插入某个元组,而被参照关系不存在相应的元组时,有以下2种策略:

® 受限插入。(仅当被参照关系中存在主键值与参照关系刚插入元组的外

键值相同的元组)

® 递归插入

³ ⑷ 元组中主键值的修改问题。

当用户欲修改关系中某个元组的主键值时,由于可能存在参照与被参照的问题,系统一般有以下两种处理策略:

® 不允许修改主键值

® 允许修改主键值,但必须保证主键值的唯一性和非空,否则拒绝修改

当修改的关系是被参照关系,而参照关系存在这样的元组,其外键值等于被参照关系要修改的主键值时,有3种处理策略:

® 级联修改

® 受限修改

® 置空值修改

当修改的关系是参照关系,而其要修改的外键值在被参照关系中不存在这样的主键值时,有2种处理策略:

® 受限修改

® 递归修改

² 触发器(Triggers)

³ 建立(附着)在某个关系(基本表)上的一系列SQL语句的集合(程序),且经预先编译后存储在数据库中。

³ 是一种特殊类型的存储过程

³ 在用户要对某一表内的数据做增、删、改操作时被触发执行

³ 触发器的功能

® 实现数据库的完整性约束和安全保护。

³ 触发器的类型

® UPDATE

® INSERT

® DELETE

³ 触发器的优点

® 比由完整性约束条件实现的完整性约束要强的多,且更加灵活。

• 并发控制  衡量DBMS性能的重要指标之一

– 事务的定义、特性…

– 封锁技术(排它锁、共享锁)

– 封锁协议

– 死锁与活锁的产生及解决方法

² 事务的定义

³ 用户定义的一组操作序列的集合,数据恢复和并发控制的基本单位。数据库系统在执行事务时,要么执行事务中全部操作,要么一个操作都不执行。

² 事务的特性(简称ACID)

³ 原子性(Atomicity):一个事务是不可分割的数据库逻辑工作单位,事务中包括的所有操作要么都做,要么都不做。

³ 一致性(Consistency):事务执行前后,数据从一个合法性状态变到

另一个合法性状态。(语义上的)

³ 隔离性(Isolation):一个事务的执行不能被其它事务干扰。

³ 持续性(Durability),也称持久性(Permanence):指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,其它操作或故障不对其产生任何影响。(通过事务日志来保证)

² 事务的定义方法

³ 语法格式

START TRANSACTION | BEGIN [work]      

执行语句 (主要是DML,不含DDL)…

COMMIT;

ROLLBACK;或ROLLBACK TO [SAVEPOINT]

BEGIN [work]显式地定义一个事务的开始

COMMIT显式地提交一个事务,并表示该事务已正确执行并结束

ROLLBACK显式地回滚(撤销)一个事务,并表示事务因执行失败而结束。

CREATE PROCEDURE WK_Sell()

BEGIN

DECLARE intMoney INT;

START TRANSACTION READ WRITE ;

UPDATE UserTab SET UserMoney=UserMoney-300 WHERE UserID='01';

UPDATE SellerTab SET SellerMoney=SellerMoney+300 WHERE SellerID='11';

SELECT UserMoney FROM UserTab WHERE UserID='01' INTO intMoney;

IF intMoney<0 THEN

SELECT 'Error!';

ROLLBACK;

ELSE

SELECT 'SUCCESS';

COMMIT;

END IF;

END //

² 事务的隐式定义

³ 系统变量autocommit,默认ON,自动提交

® SHOW VARIABLES LIKE 'autocommit’ ;® 隐式提交数据的情况

¯ 数据定义语言(DDL)

¯ 隐式使用或修改mysql数据库中的表

¯ 事务控制或关于锁定的语句

¯ 加载数据的语句¯ … …

® 当autocommit设置为OFF时,必须手动执行COMMIT才能提交事务

数据库的并发控制

² 数据库的并发控制以事务为单位进行

³ 串行访问:当多个事务对数据库进行操作时,各个事务按顺序执行,即一个事务执行完全结束后,另一个事务才开始。

³ 并发访问:当多个事务对数据库进行操作时,各事务的执行在时间上有重叠。

® 交叉并发:在单CPU系统中,多个事务交叉使用CPU。

® 同时并发:在多CPU系统中,多个事务同时占用CPU。

DBMS对事务采用并发机制的主要目的

³ 改善系统的资源利用率

³ 改善短事务的响应时间

² 但是

³ 事务的并发控制不当(各事务之间的操作没有做好隔离,互相受

到影响),会引起很多严重问题

² 丢失修改(Lost update)——写-写冲突

² 脏读(Dirty read)——读-写冲突

不能重读(Unrepeatable read)——幻影现象

幻读(phantom read)

事务的隔离性级别

³ 序列化

® 每个用户的事务依次执行,可避免脏读、不可重读和幻读,但性能低下

³ 可重复读

® 用户在同一个事务中执行同条SELECT语句数次,结果总是相同的,可

避免脏读、不可重读,存在幻读问题

³ 提交读

® 其它事务提交的更新操作,在当前事务中可见,可避免脏读,但存在不

可重读和幻读问题

³ 未提交读

® 无任何隔离(未提交的更新操作也可见),存在所有问题

(默认设置)

³ 命令

® SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL <level>

³ level

® 序列化,SERIALIZABLE

® 可重复读,REPEATABLE READ

® 提交读,READ COMMITTED

® 未提交读,READ UNCOMMITTED

² 封锁技术

³ 封锁的定义

® 防止其它事务访问指定资源的一种手段,即在一段时间内禁止某些用户对数据对象做某些操作以避免产生数据的不一致性问题的方法。

³ 基本封锁类型(InnoDB)

® ① 排它锁(eXclusive locks)又称X锁:如果某事务T对某数据建立了排它锁,则该事务能对该数据对象进行读、修改、插入和删除等操作,而其它事务则不能。

® ② 共享锁 (Shared locks)又称S锁:如果某事务对某数据建立了共享锁,则该事务能对该数据对象进行读操作,但不能进行修改等更新操作,而其它事务只能对该数据对象加S锁,而不能加X锁,即其它事务只能对该数据对象进行读操作。

® 注意:要使用这两种锁,必须关闭自动提交(autocommit),或者明确

开启一个事务

² 封锁粒度(Granularity)³ 被封锁数据对象的大小³ 封锁粒度的种类

® 行级锁

® 页面锁

® 表级锁

³ 封锁粒度与系统并发度和并发控制开销的关系

® 封锁粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,当然系统的开销也越少;封锁粒度越小,并发度越高,但系统开销也就越大。

² InnoDB的锁设置

³ 表级锁

® 加锁:LOCK TABLES table_name lock_type,...

® 解锁:UNLOCK TABLES

³ 行级锁

® 共享锁:SELECT * FROM table_name WHERE … LOCK IN SHARE MODE;® 排他锁:SELECT * FROM table_name WHERE … FOR UPDATE

² 封锁协议(Locking protocol)

³ 为保证正确地调度和控制并发操作,所有事务都应遵循的规则集合,是对事务可能执行的方法和基本操作顺序的一种限制。

³ 三级封锁协议

® ① 一级封锁协议

® 某事务T若要修改某个数据对象,则必须先对该数据对象加X锁,直到事务结束才释放,它可防止“丢失修改”所产生的数据不一致性问题。

® ② 二级封锁协议

® 一级封锁协议加上某事务T若要读取某个数据对象之前,则必须先对该数据对象加S锁,读完后即可释放S锁,这样可进一步防止“读脏数据”的问题。

® ③ 三级封锁协议

® 一级封锁协议加上某事务T若要读取某个数据对象之前,则必须先对该数据对象加S锁,且直到该事务结束后才释放S锁,这样可进一步防止数据“不可重复读”的问题。

死锁和活锁

活锁

避免活锁的简单办法:采用先来先服务的策略。

死锁

® 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

² 解决死锁问题的方法:

³ 预防法

® 一次封锁法:规定每个事务必须一次性地将所要访问的数据对象全部加锁,并在操作结束后一次性释放加在所有对象上的锁,这样就能预防死锁的发生

® 顺序封锁法:预先对数据对象规定一个封锁顺序号,所有事务都按照这个顺序对数据对象实施封锁,这样也能预防死锁的发生。

³ 诊断解除法

® 应用诊断程序发现死锁产生后,通过解锁程序排除死锁。

数据库的恢复技术

² 故障的种类

³ 事务故障:由于某种原因导致事务尚未运行完成并提交就被中断所产生的故障。

³ 系统故障:系统在运行过程中,由于某种原因致使所有正在运行的事务都以非正常的方式终止而引起的故障。

³ 介质故障:系统在运行过程中,由于某种原因致使存储在外存储器中的数据部分丢失或全部丢失的故障。

³ 病毒破坏:由计算机病毒导致计算机系统和数据库出现的各种故障。

² 故障对数据库造成的破坏³ 数据库结构被破坏。

³ 数据库结构没有被破坏,但数据的一致性被破坏

² 数据库恢复的基本原理

³ 增加数据冗余

® 即数据库中被破坏的不正确或不一致的数据可以利用存储在系统其它存储器上的冗余数据来重建。

² 数据恢复的两个关键问题

³ 如何建立冗余数据

³ 如何利用这些冗余数据实施数据库恢复

² 数据转储

³ 建立冗余数据的基本技术,它是由DBA定期地将整个数据库复制到磁带或另一个磁盘上保存起来的(这种数据称为后备副本)过程。当数据库遭到破坏后就可以利用后备副本把数据库恢复到某个一致性状态。

² 数据转储方法

³ 按转储时间来分

® 静态转储:转储期间不允许对数据库有任何操作(包括存取、修改等)活动,其优点是方法简单,缺点是降低了数据库的可用性。

® 动态转储:转储期间允许对数据库进行存取等操作,即数据转储和用户事务可并发执行,其优点是数据库可用性高,缺点是实现技术要求较高

³ 按数据转储量来分

® 海量转储:每次都转储数据库的全部数据,其特点是数据一致性好,数据恢复容易,但数据转储量大,转储时间长、不易经常进行。

® 增量转储:每次只转储数据库中上次转储以来所产生变化的那些数据,其特点是数据转储量少,时间花费少,易于经常转储,但其数据转储和恢复技术要求较高。

² 数据转储策略

³ 一般根据数据库的使用情况确定适当的转储周期和转储方法。

³ 例如,每天晚上或每周进行动态增量转储,每月进行一次海量转储等。

² 日志文件

³ 由DBMS自动建立和追加记录的、保存每一次对数据库进行更新操作的有关信息的文件,是DBMS的另一种数据冗余措施。

³ 日志文件的内容

® 事务名称、操作的时间、操作类型、修改前数据值以及修改后数据值等,还有事务的开始,提交(COMMIT)及回滚(ROLLBACK)等执行情况内容。

³ 日志文件的作用

® 当数据遭到破坏时,日志文件与数据库的后备副本结合起来才能有效而快速地恢复数据库。

³ 日志文件的登记原则

® 严格按照并行事务执行的时间次序登记;

® 必须先写日志文件,后写数据库

³ 日志文件的分类:

® 以记录为单位的日志文件,其主要内容有:① 事务的开始(BEGIN TRANSATION)标记② 事务的结束(COMMIT或ROLLBACK)标记③ 各个事务的所有更新操作

® 以数据块为单位的日志文件

当某个数据块中有数据被更新,就将整个块更新前和更新后的内容放入日志文件中。

² 事务故障的恢复:

³ 反向扫描日志文件(从日志文件末尾开始扫描),查找该事务的更新操作。

³ 对该事务的更新执行逆向操作。

³ 继续反向扫描日志文件,查找该事务的其它更新操作,并做同样处理。

³ 如此处理下去,直至读到此事务的开始标记,事务故障恢复就算完成了。

² 说明:事务故障的恢复是系统重新启动后由系统自动完成的,不需要用户干涉。

² 系统故障的恢复:

³ 产生不一致的原因:

® 某些未完成事务对数据库的更新已写入数据库;

® 有些已经提交的事务对数据库的更新还留在缓存区内没来得及写入数据库。

³ 正向扫描日志文件,找出在故障发生前已经提交的事务,并将这些事务标记记入重做队列。同时还要找出故障发生时尚未完成的事务,并将这些事务标记记入撤消队列。

³ 对撤消队列中的各个事务进行撤消(UNDO)处理,即将日志记录中“更新前的值”写到数据库中去。

³ 对重做队列中的各个事务进行重做(REDO)处理,即将日志记录中“更新后的值”写到数据库中去。

介质故障的恢复

³ 装入最新的数据库后备副本,使数据库恢复到最近一次转储时刻的一致性状态。

³ 装入有关的日志文件副本,重做已完成的事务

³ 说明:介质故障的恢复需要DBA介入,但DBA只需要重新装入最近转储的数据库后备副本和有关的日志文件副本,然后执行系统提供的恢复命令即可,具体的恢复操作仍由DBMS自动完成。

² 计算机病毒破坏的恢复

³ 系统重新启动之前先杀毒,然后根据数据库被破坏的具体情况,选择事务故障、系统故障和介质故障的恢复方法和操作步骤。

² 数据恢复的一般过程

³ ⑴ 做数据拷贝工作:将数据库后备副本拷贝到数据库系统中。

³ ⑵ 做事务恢复第一步:检查日志文件,确定哪些事务已执行结束,哪些尚未结束。

³ ⑶ 做事务恢复第二步:对尚未结束的事务作撤消处理,对已执行结束的事务按日志的记录重做。

² 检查点机制

³ 就是日志文件中一条特殊的日志记录,该记录由数据库恢复子系统定期地自动生成和维护。

³ 目的:最大限度地改善数据库恢复的效率。

数据库系统原理实验复习 

第3讲 数据定义语句

• 存储引擎

– InnoDB

– MyISAM

• 字符集和校验规则

– latin1

– MySQL选择UTF-8(Unicode)

• 数据库的定义

– CREATE DATABASE

– DROP DATABASE

• 基本表的定义(完整性约束)

– CREATE TABLE

– ALTER TABLE

– DROP TABLE

– CREATE INDEX(普通、唯一、全文)– DROP INDEX

第4讲 数据操纵语句——单表查询

• 基本表的单表查询操作 ☆☆

– SELECT … FROM …

– WHERE

– ORDER BY

– GROUP BY

• HAVING

第5讲 数据操纵语句——复杂查询

• 基本表的复杂查询操作 ☆☆

– 连接查询(等值、自身、外连接等)

• FROM … WHERE

• INNER JOIN … ON/USING

• NATURAL JOIN

• LEFT JOIN … ON

• 基本表的复杂查询操作 ☆☆

– 嵌套查询

• IN

• =、<>、>=、<=、…

• ALL、ANY

• MAX、MIN

• EXISTS、NOT EXISTS

– 带子关系的嵌套

• 将一个完整的查询结果作为临时表来使用

第6讲 数据操纵语句——更新语句

• 插入数据

– INSERT INTO …VALUES…

– INSERT INTO SELECT …

• 修改数据

– UPDATE … SET … WHERE/LIMIT …

– UPDATE 表, 子关系

– SET 表.属性列=子关系.表达式

– WHERE 连接条件 AND 选择条件

• 删除数据

– DELETE FROM … WHERE …

– DELETE FROM … WHERE 嵌套查询

完整性约束

• 主键约束

– PRIMARY KEY

– 标识列(自动增加、 UNIQUEIDENTIFIER )

• 外键约束

– FOREIGN KEY…REFERENCES …

– 级联更新、级联删除

• 域完整性约束

– NOT NULL

– UNIQUE

– DEFAULT

– CHECK

数据库编程

• 变量

–系统变量(以@@开头)

–用户自定义变量

• 会话变量(以@开头)

• 局部变量(使用DECLARE命令定义)

• 注释

–#、--、/*…*/

• 重置命令结束符

–DELIMITER

• 常用的流程控制命令

–BEGIN … END,指定程序块

–分支语句

• IF THEN … ELSEIF … ELSE … END IF

• CASE…WHEN

–循环语句

• WHILE DO … ITERATE … LEAVE… END WHILE

• REPEAT … UNTIL END REPEATE

存储过程

• 创建存储过程

– CREATE PROCEDURE

– 不带参数的存储过程()

– 带参数的存储过程(IN | OUT | INOUT)

• 调用存储过程

– CALL

• 删除存储过程

– DROP PROCEDURE

触发器

• 创建触发器

– CREATE TRIGGER … BEFORE

• UPDATE | DELETE | INSERT

• ON …

• FOR EACH ROW

– 特殊的存储过程

– 两个临时表: NEW和OLD

• 常用语句

– 判断语句

• IF [NOT] EXISTS (SELECT子句) THEN

– 错误提示

• SET msg=‘…’;

• SIGNAL SQLSTATE ‘HY000’ SET MESSAGE_TEXT=msg;– 读取临时表中数据

• NEW.属性列

数据库的安全性保护

• 创建用户

– CREATE USER <用户名> [IDENTIFIED BY <密码>];

• 修改用户名

– RENAME USER <old_user> TO <new_user>;

• 删除用户

– DROP USER <username>;

• 修改当前用户密码

– ALTER USER USER() IDENTIFIED BY ‘新密码’;

• 授予权限

– GRANT priv_type[(column_list)] ON database.table

– TO user[,user]…

– [WITH GRANT OPTION];

• 撤销权限

– REVOKE priv_type[(column_list)] ON database.table

– FROM user[,user]…;

• 创建角色

– CREATE ROLE 'role_name'[@'host_name'] [,…n];

• 给角色赋予权限

– GRANT privileges ON table_name TO 'role_name'[@'host_name’];³

• 回收角色的权限

–REVOKE privileges ON table_name FROM 'role_name';®

–SHOW PRIVILEGES;

• 给用户赋予角色

–角色创建并授权后,要赋给用户并处于激活状态才能发挥作用

–① 授 权 GRANT rolename [, …n] TO username;

–② 激 活 SET DEFAULT ROLE ALL TO username;

• 撤销用户的角色

– REVOKE rolename FROM username;

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN(中国软件开发网)是一个技术交流平台,其中涵盖了各种领域的技术内容,包括数据库数据库复习是指回顾和巩固数据库的相关知识和技能。 数据库是存储、管理和组织数据的一种数据结构。在软件开发中,数据库起到储存数据的作用,同时也提供了数据操作、查询和管理的功能。因此,深入理解数据库的原理和技术对于开发人员来说非常重要。 数据库复习的内容可以包括以下几个方面: 1. 数据库基础知识:了解数据库的概念、特点、分类和常用的数据库系统,如关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。 2. SQL语言:掌握SQL语言的基本语法、查询、更新、删除和插入数据的操作,熟悉常用的SQL函数和操作符,能够编写复杂的SQL查询语句和数据操作语句。 3. 数据库设计:了解数据库设计的基本原则和范式,能够进行数据库的逻辑设计和物理设计,并能评估和调整数据库的性能。 4. 数据库索引和优化:理解数据库索引的原理和类型,了解索引的创建、使用和优化策略,能够通过合理的索引设计和优化来提升数据库的查询性能。 5. 数据库事务和并发控制:掌握数据库事务的概念和特性,理解并发访问引起的数据一致性问题,学会应对并发访问的技巧和控制策略。 6. 数据库备份和恢复:了解数据库备份和恢复的重要性,掌握常用的数据库备份和恢复方法和工具,能够制定和执行数据库的备份和恢复策略。 7. 数据库安全性:熟悉数据库的安全性问题和常见的安全攻击,能够使用数据库的安全机制和技术来防护和保护数据的安全。 通过对CSDN中数据库相关文章的阅读、学习和实践,可以加深对数据库的理解和掌握,提高数据库的设计和开发能力。此外,还可以通过访问CSDN的论坛和社区,与其他开发者交流和分享经验,进一步提升自己的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值