人生最大的遗憾,往往并不是没有去做,而是没有坚持;明明只要再坚持努力一丢丢,却选择放弃,与成功失之交臂。
是描述事务的符号记录,是指用物理符号记录下来的、可以鉴别的信息。
多种表现形式包括数字、字母、文字、特殊字符组成的文本数据,也可以是图形、图像、动画、影像、声音、语言等多媒体数据。
(相关资料图)
数据的解释是对数据含义的说明,也称为数据的语义,即数据所蕴含的信息。数据与其语义密不可分,没有语义的数据是没有意义和不完整的。因此,数据是信息存在的一种形式,只有通过解释或处理的数据才能成为有用的信息。
是长期存储在计算机中的有组织的、可共享的大量数据集合,且数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性,系统易于扩展,并可以被多个用户共享。
数据库中存储的数据具有永久存储、有组织和可共享三个基本特点。
是专门用来建立和管理数据库的一套软件,介于应用程序和操作系统之间。它负责科学有效地组织和存储数据,并帮助数据库的使用者能够从大量的数据中快速地获取所需数据,以及提供必要的安全性和完整性等统一控制机制,实现对数据有效的管理和维护。
数据库管理系统的主要功能包括:
是指在计算机中引入数据库技术之后的系统。通常,一个完整的数据库系统包括数据库、数据库管理系统以及相关实用工具、应用程序、数据库管理员和用户:
数据库管理员(DBA)
不同于普通数据库用户,他们是专门负责对数据库进行维护,并保证数据库正常、高效运行的人员。
用户
数据库系统的服务对象,其通常包括程序员和数据库终端用户两类用户,程序员通过高级程序设计语言和数据库语言编写数据库应用程序,应用程序会根据需要向数据库管理系统发出适当的请求,再由数据库管理系统对数据库执行相应操作。而终端用户则是从客户机或联机终端上以交互方式向数据库系统提出各种操作请求,并由数据库管理系统操作执行,而后访问数据库中的数据。
数据管理可以从两个方面来理解:一是针对组织业务的管理,负责制定并执行整个组织中关于数据的定义、组织、保护与有效使用的策略、过程和计划。二是依靠技术,负责实现数据作为一种资源的集中控制管理。
将收集的数据进行适当的构造,这称为数据组织。数据的组织分为逻辑组织和物理组织两种:逻辑组织是用户或应用程序所使用的数据结构形式;而物理组织则是数据在物理存储设备上的结构形式。这两者之间可以相互独立。
为了备用,需要将数据归类进行存储。为了向用户提供信息,存储的数据要能够方便的被选择提取,这称为检索。为了保护数据的正确性和安全性等,必须建立一些相应的规则和执行这些规则的过程来控制数据的存与取,以实现数据库管理的目标。
保管的数据是那些需要长期、多次使用的数据,但随着时间的推移,数据组织单位的内外环境会发生变化,因而存储的数据在规模和结构方面都可能变化,所以数据管理还必须能够对其进行维护。
数据管理的任务:进行数据收集、组织、控制、存储、选取、维护,实现在适当的时刻、以适当的形式、给适当的人、提供适当的数据,它是数据处理的中心问题,而数据处理则是指对各种数据进行收集、存储、加工和传播的一系列活动的总和。
数据管理技术共经历了人工管理、文件系统和数据库系统三个阶段:
文件系统是将数据的逻辑结构和物理结构分离,由 “存放方法” 实现逻辑结构和物理结构之间的映射。
应用程序只涉及数据的逻辑结构,系统决定数据的物理结构,两者之间可以有差别。
当物理结构发生改变时,不会导致应用程序的修改,这称为数据的物理独立性。
数据的物理独立性使应用程序脱离数据的物理结构,使其适用性得以提高。同时,应用程序的编程人员不必关心数据的物理存储细节,因而其生产效率相对也得到提高。
相对于人工管理数据的方法,文件系统管理数据有了很大的改进,具有数据可以长期保存和专门管理的特点,它提供了物理数据独立性,使应用程序与数据的具体物理结构分离并通过数据的抽取、排序、合并等可以为应用程序提供新的文件,从而使得数据共享成为可能;但是在文件系统中,不能实现数据的普通共享,只能实现文件级的共享,而不能在记录或数据项级实现数据的共享。文件的逻辑结构使根据它的应用而设计的,数据的逻辑结构与应用程序之间相互依赖。
与人工管理、文件系统两种数据库管理方法相比较,数据库系统具有以下特点:
数据集成
是数据库管理系统的主要目的
数据共享性高
不只是同一数据可以被多个不同用户存取,还包含了并发共享
数据冗余小
并非所有的冗余都可以或者应该被消除
数据一致性
通过消除或者控制数据冗余,可以在一定的范围内避免数据的不一致性,引起不一致的根源是数据冗余
数据独立性高
数据定义与使用数据的应用程序分离称为数据独立。数据定义的修改,在一定范围内不会引起应用程序的修改,这种独立称为数据的逻辑独立。可改变数据的存储结构或存取方法以响应变化的需求而无需修改现有程序,这种称为数据的物理独立。
实施统一管理与控制
主要包括数据的安全性、完整性、并发控制与故障恢复等,即数据库保护
减少应用程序的开发与维护的工作量
数据库方法表现在应用方面的一个优点是在数据库上开发与维护新的应用所花费的代价和时间大大减少
若从数据库管理员的角度来看,数据库系统可分为内部系统结构和外部体系结构,其中内部系统结构通常采用三级模式结构。
模式
在三级模式中,模式也称为概念模式或逻辑模式,它是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
DBMS 提供模式描述语言来严格的定义模式,不仅要定义数据的逻辑结构,还要定义数据之间的联系,定义数据相关的安全性、完整性等要求。
外模式
外模式也称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。
外模式实际上是用于满足不同数据库用户需求的数据视图,即用户视图。相应地,DBMS 提供子模式描述语言来严格的定义子模式。
内模式
内模式也称为存储模式,它是对数据库中物理结构和存储方式的描述,是数据在数据库内部的表现形式。
内模式实际上是整个数据库的最底层表示,它不同于物理层,是数据库管理员所见到的,特定的 DBMS 所处理的数据库的内部结构,即内部视图或存储视图。相应地,DBMS 提供内模式描述语言来严格的定义内模式,即定义所有的内部记录类型、索引和文件的组织方式,以及所有数据控制方面的细节。
三级模式的两层映像与数据独立性
构成数据库系统三级模式结构的三个模式分别是对数据的三级抽象,它们彼此之间具有以下特点:
外模式/模式映像(逻辑独立性),所谓映像,就是一种对应规则,它指出映像双方是如何进行转换的。
模式/内模式映像(物理独立性),定义了数据库全局逻辑结构与物理存储之间的对应关系,这种映像的定义通常是在模式中加以描述的,模式/内模式映像是唯一的。
客户端/服务器结构(C/S)
在客户端/服务器结构中,命令行客户端、图形化界面管理工具、应用程序等称为“客户端”、“前台”或“表示层”,主要完成数据库使用者的交互任务。而数据库管理系统则称为“服务器”、“后台”或“数据层”,主要负责数据管理。这种操作数据库的模式称为客户端/服务器(C/S)模式。在这个模式中,客户端与服务器可以同时工作在同一台计算机上,这种工作方式称为“单机方式”,也可以“网络方式”进行运行。
浏览器/服务器结构(B/S)
是一种基于 Web 应用的客户端/服务器结构,也成为三层客户端/服务器结构。在数据库系统中,它将与数据库管理系统交互的客户端进一步细分为“表示层”和“处理层”,“表示层”是数据使用者的操作和展示界面,“处理层”也称为中间层。
数据模型是对现实世界数据特征的抽象,描述的是数据的共性内容。
数据具有静态和动态两种特征。其中数据的静态特征包括数据的基本结构、数据间的联系以及对数据取值范围的约束;数据的动态特征是指对数据可以进行符合一定规则的操作。
数据模型通常由数据结构、数据操作和数据约束三个要素组成。
概念层数据模型
也称为数据的概念模型或信息模型,它用来描述现实世界的事物,与具体的计算机系统无关,且独立于任何 DBMS,但容易向 DBMS 所支持的逻辑数据模型转换。
基本概念:
实体(Entity)
客观存在并可相互区别的事物称为实体
属性(Attribute)
实体所具有的某种特性称为实体的属性
码/键(Key)
可唯一标识实体的属性集称为码或键
域(Domain)
属性的取值范围称为该属性的域。
实体型(Entity Type)
具有相同属性的实体必然具有共同的特征和性质
实体集(Entity Set)
同类型实体的集合称为实体集
联系(Relationship)
实体内部的联系通常是指实体个属性之间的联系,实体之间的联系是指不同实体之间的联系
概念模型的表示方法
用 E-R 图来描述现实世界的概念模型,实体用矩形表示,属性用椭圆表示,联系用菱形表示。
逻辑层数据模型
逻辑层是数据抽象的中间层,描述数据整体的逻辑结构。
主要的逻辑数据模型有:
层次模型
数据库最早使用的数据模型。
特点:有且仅有一个节点没有父节点,它称作根节点,其他节点有且仅有一个父节点。
网状模型
以网状结构表示实体与实体之间的联系。
关系模型
用二维表结构来表示实体与实体之间的联系的模型,并以二维表格的形式组织数据库中的数据。
优点:关系模型是建立在严格的数学概念基础之上的,关系模型的概念单一,统一用关系来表示实体与实体之间的联系,对数据的检索和更新结果同样也是用关系来表示,关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
面向对象模型
与数据库相结合所构成的数据模型。
物理层数据模型
也称为数据的物理模型,其描述数据在存储介质上的组织结构,是逻辑模 型的物理实现,即每一种逻辑模型在实现时都有与之对应的物理模型。
从现实世界到概念模型的转换是由数据库设计人员完成的;从概念模型到逻辑模型的转换可以由数据库设计人员完成,也可以用数据库设计工具协助设计人员完成;从逻辑模型到物理模型的转换是由数据库管理系统完成。
关系数据库的基本特征是使用关系数据模型组织数据,这种思想源于数学。
关系数据库的优点:包括高级的非过程语言接口、较好的数据独立性等,为商品化的关系数据库管理系统的研制做好了技术上的准备。
关系数据库系统是支持关系模型的数据库系统。作为一种数据模型,关系模型同样包含三个组成要素,分别是关系数据结构、关系操作结合和关系完整性约束。
关系模型只包含单一的数据结构,即关系。在关系模型中,现实世界的实体以及实体间的各种联系,均是使用关系来表示。在用户看来,关系模型是把数据库表示为关系的集合,且关系数据库是以二维表格的形式组织数据。
表
也称关系,是一个二维的数据结构,它由表名、构成表的各个列及若干行数据组成。
每个表有一个唯一的表名,表中每一行数据描述一条具体的记录值。
关系
一个关系逻辑上对应一张二维表,可以为每个关系取一个名称进行标识。
关系可以有三种类型,即基本关系、查询表和视图表。基本关系通常又称为基本表或基表,是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果;视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
列
表中的列,也称作字段或属性。表中每一列都有一个名称,称为列名、字段名或属性名。每一列表示实体的一个属性,具有相同的数据类型。
在一个数据库中,表名必须唯一;在表中,字段名必须唯一,不同表中可以出现相同字段名;表和字段的命名应尽量有意义,并尽量简单。
属性
表中的一个列即为一个属性,给每一个属性起一个名称即为属性名。与之同义的术语是“列”。表中属性的个数称为关系的元或度。列的值称为属性值;属性的取值范围称为值域。
行
表中的行,也称作元组或记录。表中的数据是按行存储的,表中的一行数据即为一个元组或一条记录,其每行由若干字段值组成,每个字段描述该对象的一个属性或特征。
元组
表中的一行即为一个元组
分量
元组中的一个属性值称为分量
码或键
如果在一个关系中,存在这样的属性,使得在该关系的任何一个关系状态中的两个元组,在该属性上值的组合都不相同,即这些属性的值都能用来唯一标识该关系的元组,则称这些属性为该关系的码或键。
超码或超键
如果在关系的一个码中移去某个属性,它仍然是这个关系的码,则称这样的码或键为该关系的超码或超键。一般每个关系至少有一个默认的超码或超键,即该关系的所有属性的集合,也是这个关系的最大超码或超键。
候选码或候选键
如果在关系的一个码或键中,不能从中移去任何一个属性,否则它就不是这个关系的码或键,则称这样的码或键为该关系的候选码或候选键,一个关系的候选码或候选键是这个关系的最小超码或超键。
有些情况下,需要几个属性才能唯一确定一条记录。
主码或主键
在一个关系的若干个候选码或候选键中指定一个用来唯一标识关系的元组,则称这个被指定的候选码或候选键位该关系的主码或主键。
全码或全键
一个关系模式的所有属性集合是这个关系的主码或主键,则称这样的主码或主键为全码或全键。
主属性和非主属性
关系中包含任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
外码或外键
当关系中的某个属性不是这个关系的主码或候选码,而是另一个关系的主码时,称该属性为这个关系的外码或外键。
参照关系和被参照关系
参照关系也称为从关系,被参照关系也称为主关系,它们是指以外码或外键相关联的两个关系,以外码作为主码的关系称为被参照关系,外码所在的关系称为参照关系。被参照关系域参照关系是通过外码相联系的,这种联系通常是一对多的联系。
域
表示属性的取值范围
数据类型
表中每个列都有相应的数据类型,它用于限制该列中存储的数据。每个字段表示同一类信息,具有相同的数据类型。
关系模式
同数据模型一样,数据库也有型和值之分,在关系数据库中,关系模式是型,关系是值,即关系模式是对关系的描述。
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的。这是因为关系操作在不断地更新着数据库中的数据。人们常常会把关系模式和关系都笼统地称为关系。
关系数据库
关系数据库是以关系模式作为数据库的逻辑模型,并采用关系作为数据组织方式的一类数据,其数据库操作建立在关系代数的基础上。在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
关系数据库对关系是有限定的,具体要求如下:
基本的关系操作
关系模型中常用的关系操作包括查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。
查询操作分为:选择、投影、连接、除、并、差、交、笛卡尔积等。
五种基本操作:选择、投影、并、差、笛卡尔积。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合,这种操作方式也称为一次一集合的方式。
关系数据语言的分类
关系操作是通过关系语言来实现的,关系语言的特点是高度非过程化,即用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择由 DBMS 的优化机制来完成;用户也不必求助于循环和递归来完成数据的重复操作。
关系操作的能力可以用代数方式和逻辑方式来表示。
关系代数、元组关系演算和域关系演算均是抽象的查询语言。
结构化查询语言 SQL充分体现了关系数据语言的特点和优点,是关于数据库的标准语言。
关系数据语言可以分为三类:关系代数语言、关系演算语言及兼具两种特点的语言。共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够独立使用也可以嵌入高级语言中使用。
关系代数
操作包含三大要素:操作对象、操作符、操作结果。在关系代数操作中,操作对象和操作结果均为关系。
关系代数直接应用关系的运算来表达操作目的,而代数用到的运算符包括集合运算符和专门的关系运算符两类:
运算符 | 含义 | |
---|---|---|
集合运算符 | ∪ | 并 |
∩ | 交 | |
- | 差 | |
⨉ | 笛卡尔积 | |
专门的关系运算符 | ∂ | 选择 |
π | 投影 | |
⨝ | 连接 | |
÷ | 除 | |
比较操作符 | > | 大于 |
⩾ | 大于等于 | |
< | 小于 | |
⩽ | 小于等于 | |
= | 等于 | |
≠ | 不等于 | |
逻辑操作符 | ┐ | 非 |
∧ | 与 | |
∨ | 或 |
关系代数经过有限次复合的式子称为关系代数操作表达式,简称关系代数表达式。
传统的集合运算
是二目运算,关系看成元组的集合,其运算关系是从关系的水平方向,即行的角度来进行,具体有并、差、交、笛卡尔积 4 种运算。
并
R3 = R1 ∪ R2,R3 是由属于关系 R1 或 R2 的所有不同元组组成
差
R3 = R1 - R2,R3 是由属于关系 R1,但不属于 R2 的元组组成
交
R3 = R1 ∩ R2,R3 是由既属于关系 R1,同时又属于 R2 的元组组成
笛卡尔积
R3 = R1 X R2,R1 为 M 元关系,R2 为 N 元关系,R3 是由 R1 和 R2 的所有元组连接而成的具有(M + N)个分量的元组组成
专门的关系运算
不仅涉及行,而且涉及列,它可分为一元专门关系操作和二元专门关系操作。一元专门关系操作包括对单个关系进行垂直分解的投影运算和进行水平分解的选择运算。二元专门关系操作则是对两个关系进行操作,包括连接运算和除运算。
选择(SELECT)
SELECT 关系名 WHERE 条件,其中条件是由常数、属性名或列名、比较操作符及逻辑操作符组成的条件表达式。
投影(PROJECTION)
PROJECTION 关系名(属性名1,属性名2,...... 属性名N)
连接(JOIN)
JOIN 关系名1 AND 关系名2 WHERE 条件,条件是由比较操作符和属性名或列名组成的条件表达式,连接操作中有两种最为常用的连接:等值连接和自然连接。
除(DIVISION)
R ÷ S,R 和 S 代表两个不同的关系,在除运算中,若被除关系为 M 元关系,除关系为 N 元关系,则运算结果为一个 M- N 元关系。
数据库的数据完整性是指数据库中数据的正确性、相容性和一致性。
实体完整性约束
是指关系的主属性,即主码的组成不能为空,也就是关系的主属性不能是空值 NULL。
参照完整性约束
就是定义外码和主码之间的引用规则,它是对关系间引用数据的一种限制。
描述定义:若属性 F 是基本关系 R 的外码,它与基本关系 S 的主码 K 相对应,则对 R 中每个元组在 F 上的值只允许两种可能,即要么取空值,要么等于 S 中某个元组的主码值。
用户定义完整性约束
是针对某一应用环境的完整性约束条件,它反映了某一具体应用所涉及的数据应满足的要求。
关系模型完整性约束的校验
为了维护数据库中数据的完整性,在对关系数据库执行插入、删除和更新操作时,需要检验是否满足上述三类完整性约束。
函数依赖是指关系中属性间的对应关系。设 R 为任一给定关系,如果对于 R 中属性 X 的每一个值,R 中属性 Y 只有唯一值与之对应,则称 X 函数决定 Y 或称 Y 函数依赖于 X,记作 X -> Y,其中 X 称为决定因素。
完全函数依赖
设 R 为任一给定关系,X、Y 为其属性集,若 X -> Y,且对 X 中的任何真子集 X 都有 X -> Y,则称 Y 完全函数依赖于 X。
部分函数依赖
设 R 为任一给定关系,X、Y 为其属性集,若 X -> Y,且 X 中存在一个真子集 X,满足 X -> Y,则称 Y 部分函数依赖于 X。
传递函数依赖
设 R 为任一给定关系,X、Y、Z 为其不同属性子集,若 X -> Y,Y -> X,Y -> Z,则有 X -> Z,称为 Z 传递函数依赖于 X。
关键字的定义:设 R 为任一给定关系,U 为其所含的全部属性集合,X 为 U 的子集,若有完全函数依赖 X -> U,则 X 为 R 的一个候选关键字。
一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程化就叫规范化。
第一范式
设 R 为任一给定关系,如果 R 中每一列与行的交点处的取值都是不可再分的基本元素,则称 R 为第一范式。第一范式是一个不含重复组的关系,其中不存在嵌套结构,不满足第一范式的关系为非规范关系。
第二范式
设 R 为任一给定关系,若 R 为 1NF,且其所有非主属性都完全函数依赖与候选关键字,则 R 为第二范式。
第三范式
设 R 为任一给定关系,若 R 为 2NF,且其每一个非主属性都不传递函数依赖于候选关键字,则 R 为第三范式。
BCNF
设 R 为任一给定关系,X、Y 为其属性集,F 为其函数依赖集,若 R 为 3NF,且其 F 中所有函数依赖 X -> Y(Y 不属于 X)中的 X 必须包含候选关键字,则 R 为 BCNF。
主要应用于数据库设计中的概念设计阶段。在实现设计中当将 E-R 图向关系模型转换时,还可以用它来分析发现概念设计中可能存在的遗漏或不当之处,特别是联系实体是否不单独转换为一独立关系而集成到与之相连的基本实体中取处理时,规范化理论时最有效的评价准则。
数据库的生命周期可分为两个阶段:
设计的目标:
满足应用功能需求
指用户当前与可预知的将来应用所需求的数据及其联系,应全部准确地存储在数据库中,从而可满足用户应用中所需要的对数据进行存、取、删、改等操作。
良好的数据库性能
主要是指对数据库的高效率存取和空间的节省,并具有良好的数据共享性、完整性、一致性及安全保密性。
数据库结构设计
是针对给定的应用环境进行数据库的模式或子模式的设计,包括数据库的概念结构设计、逻辑结构设计和物理结构设计。模式定义并给出各应用程序共享的结构,是静态的,一经形成通常不会改变。
数据库行为设计
是确定数据库用户的行为和动作,而用户的行为和动作是对数据库的操作,它们通常是通过应用程序来实现的,行为设计是动态的。
直观设计法
最原始的数据库设计方法
规范设计法
计算机辅助设计法
通常通过人机交互的方式来完成(例如 CASE 工具)
数据库设计过程实际上是一个反复修改、反复设计的迭代过程。
需求分析阶段
结构设计阶段
包括概念结构设计、逻辑结构设计和物理结构设计
行为设计阶段
包括功能设计、事务设计和程序设计
数据库实施阶段
包括加载数据库和调试运行应用程序
数据库运行和维护阶段
数据库设计的特点是结构设计与行为设计分离。
需求分析是数据库设计的起点,目标是了解与分析用户的信息及应用处理的要求,并将结果按一定的格式整理而形成需求分析报告,该分析报告是后续过程的依据。
数据库设计人员进行需求分析的基本方法是听取数据库应用部门工作人员的报告,并与之座谈。
需求分析分为四个步骤:
确定数据库范围
数据库设计的第一项工作就是要确定数据库范围,即确定数据库应支持哪些应用功能。
应用过程分析
是指了解并分析数据与数据处理间的关系,应用过程分析的结果是数据库结构设计的重要依据。数据库应用过程可以借助数据流图或其他信息及应用结构图形表示。
收集与分析数据
数据收集与分析的任务是了解并分析数据的组成格式及操作特征,每个数据元素的语义及关系等,并将它们收集起来整理归档。
数据流图中所涉及的数据都是收集与分析的对象,主要包括报表、文件、单据及各种原始资料。
数据的收集与分析工作:
静态结构
是指不施加应用操作于其上时数据的原始状况,这可通过数据分类表和数据元素表进行说明:
数据分类表用于数据的总体描述,格式如下:
数据 id | 数据名 | 用途 | 主人 | 用户 | 来源 | 去向 | 存档时间 | 数据量 |
---|
数据元素表指通常意义下的数据项或属性,格式如下:
数据 id | 数据元素 id | 元素名 | 意义 | 类型 | 长度 | 算法 | 备注 |
---|
动态结构
是指将应用操作施加于数据之上后数据的状况,可通过任务分类表和数据表操作特征表进行说明。
任务分类表示根据对数据流图的分析,可将业务处理过程划分为不同任务,格式如下:
任务 id | 名称 | 功能 | 类型 | 主人 | 用户 | 执行日期 | 频率 | 操作过程 | 备注 |
---|
数据操作特征表用以描述任务和数据之间的关系,包括不同任务对数据执行不同的操作频率,格式如下:
任务 id | 数据 id | 建立 | 查询 | 插入 | 修改 | 删除 | 数据量 |
---|
数据约束
是指使用数据时的特殊要求:
编写需求分析报告
作为需求分析的一个总结,内容如下:
数据库的应用功能目标
标明不同用户视图范围
应用处理过程需求说明
数据字典
是数据库系统中存储三级结构定义的数据库,通常指的是数据库系统中各类数据详细描述的集合。包括数据分类表、数据元素表和各类原始资料。
数据量
根据数据分类表中的静态数据量和操作特征表中的动态数据量,进行统计计算,求出数据总量。
数据约束
概念结构设计的任务是需求分析中产生的需求分析报告的基础上,按照特定的方法设计满足应用需求的用户信息结构,该信息结构通常称为概念模型。E-R 图作为概念模型的描述工具。
概念结构设计的常用方法有实体分析法和属性综合法两种,它们也分别称为自顶向下和自底向上法。
逻辑结构设计的目标是将概念模型转为等价的、并为特定 DBMS 所支持数据模型的结构。
数据库逻辑模型一般由层次、网状、关系数据模型表示。
逻辑结构设计的输入信息包括:
逻辑结构设计的输出信息包括:
逻辑结构设计的步骤:
是指对于一个给定的数据库逻辑结构,研究并构造物理结构的过程,其具体任务主要是确定数据库在存储设备上的存储结构及存取方法,因 DBMS 的不同还可能包括建立索引和聚集,以及物理块大小、缓冲区个数和大小、数据压缩的选择等。
工作包括:加载数据、应用程序设计和数据库试运行。
系统维护中最困难的工作是数据库重组与重构。
关系数据库是一类采用关系模型作为逻辑数据模型的数据库系统,遵从数据库设计的基本步骤,包括:需求分析、逻辑结构设计、物理结构设计、数据库实施、数据库的运行和维护等阶段。
关系数据库的概念结构设计与逻辑结构设计是关系数据库整个设计过程的关键。
在关系数据库设计的不同阶段,会形成数据库的各级模式:
关系数据库的概念结构设计通常采用自顶向下法,它通过两个步骤来完成概念设计,首先建立局部信息结构,然后将局部信息结构合成全局信息结构并优化,使用 E-R 图作为概念模式的描述工具。
E-R 图的表示方法:
概念结构设计就是将需求分析得到的用户需求抽象为信息结构的过程,通常使用 E-R 图来作为描述现实世界的建模工具。E-R 图提供了表示现实世界中实体、属性和联系的方法。
两个及两个以上的实体型之间和单个实体型内的联系,都会存在如下关系:
局部信息结构设计:
根据需求分析报告中标明的不同用户视图范围所建立的满足该范围内用户需求的信息结构,称为局部信息结构。
局部信息结构的设计步骤包括确定局部范围、选择实体、选择实体关键字、确定实体间联系、确定实体的属性。
全局信息结构设计:
全局信息结构设计是将上述步骤中产生的所有局部信息结构合并成一个全局信息结构。
各局部 E-R 图之间的冲突主要表现在三个方面:
属性冲突
属性域冲突和属性取值单位冲突
命名冲突
同名异义或异名同义
结构冲突
逻辑结构设计的任务是把概念结构设计产生的概念模型转换为具体的 DBMS 所支持的逻辑数据模型,也就是导出特定的 DBMS 可以处理的数据库逻辑结构。
通常包括三项工作:
E-R 图向关系模型转换
遵循原则如下:
数据模型的优化
方法如下:
设计用户子模式
定义用户模式具体包括以下几个方面:
关系数据库系统的优点之一是用户通常不用进行数据的存储结构和存取方法的设计。
物理设计的任务主要是通过对关系建立索引和聚集来实现与应用相关数据的逻辑连接和物理聚集,以改善对数据库的存取效率。
建立索引:
索引的建立是通过 DBMS 提供的有关命令来实现的,用以建立索引的哪些属性也应是其所在关系中使用频率较高的属性,建立索引通常有静态和动态两种:
静态建立索引是指应用人员预先建立索引,一旦建立,后续的应用程序均可通过该索引存取数据,它多适合于用户较多且使用周期相对较长的数据。
动态建立索引是指应用人员在程序内外临时建立索引,它适合于单独用户或临时性使用要求情况。
建立聚集:
聚集是将相关数据集中存放的物理存储技术,借以提高 IO 的数据命中率而改善存取速度,其功能由具体的 DBMS 所提供,如 MySQL。
数据聚集结构的一种有效结构方式是块结构方式,块与块之间由指针连接,一个块对应于一个物理分区。
SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理数据库系统。功能不仅仅是查询,还包括数据定义、数据操纵和数据控制等用于数据库有关的一系列功能。
各个关系数据库管理系统产品在实现标准 SQL 时各有差别,与 SQL 标准的符合程度也不相同,但它们仍然遵循 SQL 标准。
四大功能:数据查询、数据定义、数据操纵和数据控制。
数据定义语言:
主要用于对数据库中的各种对象进行创建、删除、修改等操作。
数据库对象主要有表、默认约束、规则、视图、触发器、存储过程等。
包括 SQL 语句有:
CREATE
用于创建数据库或数据库对象
ALTER
用于对数据库或数据库对象进行更改
DROP
用于删除数据库或数据库对象
数据操纵语言:
主要用于操纵数据库中各种对象,检索和修改数据。
包括 SQL 语句主要有:
SELECT
用于从表或视图中检索数据,使用最为频繁的语句之一
INSERT
用于将数据插入到列表或视图中
UPDATE
用于修改表或视图中的数据,其既可修改表或视图中一行数据,也可同时修改多行或全部数据
DELETE
用于删除表或视图中的数据
数据控制语言:
主要用于安全管理。
主要 SQL 语句如下:
GRANT
用于授权,把语句许可或对象许可的权限授予其他用户和角色
REVOKE
用于收回权限
嵌入式和动态 SQL 规则:
规定了 SQL 语句在高级程序设计语言中使用的规范方法,以便适应较为复杂的应用。
SQL 调用和会话规则:
调用包括 SQL 例程和调用规则,以便提高 SQL 的灵活性、有效性、共享性以及使 SQL 具有更多的高级语言的特征。
是一个关系数据库管理系统(RDBMS),它具有客户/服务器体系结构。
两种架构方式:
LAMP
即使用 Linux 作为操作系统,Apache 作为 Web 服务器,MySQL 作为数据库管理系统,PHP、Perl 或 Python 语言作为服务器端脚本解释器。
WAMP
即使用 Windows 作为操作系统,Apache 作为 Web 服务器,MySQL 作为数据库管理系统,PHP、Perl 或 Python 语言作为服务器端脚本解释器。
作为一种关系数据库管理系统,遵循 SQL 标准,提供了对数据库定义语言 DDL、数据操纵语言 DML、数据控制语言 DCL 的支持,同样支持关系数据库的三级模式结构。
MySQL 中一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以有若干索引,索引也存放在存储文件中。
MySQL 在 SQL 标准的基础上增加了部分扩展语言要素:包括常量、变量、运算符、表达式、函数、流程控制语句和注解等:
常量
是指在程序运行过程中值不变的量,也称为字面值或标量值。常量的使用格式取决于值的数据类型,可分为字符串常量、数值常量、十六进制常量、时间日期常量、位字段值、布尔值和 NULL 值:
变量
在 MySQL 中,变量分为用户变量和系统变量。用户变量前常添加一个符号 “@”,大多数系统变量前添加两个 “@” 符号。
运算符
MySQL 几类编程语言中常用的运算符:
算数运算符
+(加)、-(减)、*(乘)、/(除)、%(取模)
位运算符
&(位与)、|(位或)、^(异位或)、~(位取反)、>>(位右移)、<<(位左移)
比较运算符
=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、<>(不等于)、!=(不等于)、<=>(相等或都等于空)
逻辑运算符
NOT 或 !(逻辑非)、AND 或 &&(逻辑与)、OR 或 ||(逻辑或)、XOR(逻辑异或)
表达式
是常量、变量、列名、复杂计算、运算符和函数的组合,表达式可分为字符表达式、数值型表达式和日期表达式。
内置函数
MySQL 包含了 100 多个函数,基本分类如下:
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有数据库模式、表、索引、视图等。
SQL 标准提供的数据定义语句如下表:
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA 语句 | DROP SCHEMA 语句 | |
表 | CREATE TABLE 语句 | DROP TABLE 语句 | ALTER TABLE 语句 |
视图 | CREATE VIEW 语句 | DROP VIEW 语句 |
创建数据库
CREATE {DATABASE|SCHEMA}[IF NOT EXISTS] db_name[DEFAULT]CHARACTER SET[=]charset_name | [DEFAULT]COLLATE[=]collation_name
选择数据库
USE db_name;
修改数据库
ALTER {DATABASE|SCHEMA}[db_name]alter_specification ...
删除数据库
DROP {DATABASE|SCHEMA}[IF EXISTS]db_name
查看数据库
SHOW {DATABASES|SCHEMAS}[LIKE "pattern"|WHERE expr]
成功创建数据库之后,才能在数据库中创建数据表。
数据表被定义为字段的集合,数据在表中是按照行和列的格式来存储的,每一行代表一条记录,每一列代表记录中一个字段的取值。
创建表
CREATE [TEMPORARY] TABLE tbl_name(字段名1 数据类型 [列级完整性约束条件][默认值][,字段名2 数据类型 [列级完整性约束条件][默认值]......] [,表级完整性约束条件])[ENGINE=引擎类型];
临时表与持久表
在创建表的 CREATE TABLE 语句中,若添加可选项 “TEMPORARY” 关键字,则表示使用该语句创建的表为临时表,而若不选用该关键字创建表则为持久表。
数据类型
指系统中所允许的数据的类型。主要的数据类型包括数值类型、日期和时间类型、字符串类型、空间数据类型等。
关键字(AUTO_INCREMENT)
可以为表中数据类型为整型的列设置为自增属性。
指定默认值
是指在向表插入数据时,如果没有明确给出某个表所对应的值,则 DBMS 此时允许为此表列指定一个值。
NULL 值
NULL 值是指没有值或缺值。不能将 NULL 值与空串相混淆,NULL 是没有值的,它不是空串。
主键
是通过 PRIMARY KEY 关键字来指定的。主键值必须唯一,而且主键一定要为 NOT NULL。
更新表
在 MySQL 中,可以使用 ALTER TABLE 语句来更改原有表的结构。例如可以增加或删减列、创建或取消索引、更改原有列的数据类型、重新命名列或表,还可以更改表的评注和引擎类型等,甚至还可以使用该语句为表重新创建触发器、存储过程、索引和外键等。
ADD[COLUMN] 子句
增加新列,可同时增加多个列。
CHANGE[COLUMN] 子句
修改表中列的名称或或数据类型。
ALTER[COLUMN] 子句
需要修改或删除表中指定列的默认值。
MODIFY[COLUMN] 子句
只会修改指定列的数据类型,而不会干涉它的列名。
DROP[COLUMN] 子句
卸除表中多余的列。
RENAME[TO] 子句
为表重新赋予一个表名。
重命名表
RENAME TABLE tb1_name TO new_tb1_name[,tb1_name2 TO new_tb1_name2] ...
删除表
DROP [TEMPORARY] TABLE [IF EXISTS] tb1_name[,tb1_name] ...[RESTRICT | CASCADE]
查看表
显示表的名称
SHOW [FULL] TABLES [{FROM | IN} db_name]
显示表的结构
SHOW [FULL] COLUMNS {FROM | IN} tb_name [{FROM | IN} db_name] [LIKE "pattern" | WHERE expr]{DESCRIBE | DESC} tb1_name [co1_name | wild]
索引是 DBMS 根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系,因而索引实质上是一张描述索引的列值与原表记录中记录行之间一一对应关系的有序表。
弊端:
分类:
普通索引
最基本的索引类型,没有任何限制。
唯一性索引
索引列中的所有值都只能出现一次,必须是唯一的。
主键
一种特殊的唯一性索引。
索引的创建:
使用 CREATE INDEX 语句创建
CREATE [UNIQUE] INDEX index_name ON tb1_name(index_col_name,...)
使用 CREATE TABLE 语句创建
使用 ALTER TABLE 语句创建
索引的查看:
SHOW {INDEX|INDEXES|KEYS} {FROM|IN} tb1_name [{FROM|IN} db_name][WHERE expr]
索引的删除:
使用 DROP INDEX 语句
DROP INDEX index_name ON tb1_name
使用 ALTER TABLE 语句
添加若干行数据、修改表中的数据和删除表中若干行数据。
使用 INSERT …… VALUES 语句插入单行或多行元组数据
INSERT [INTO] tb1_name [(col_name,……)] {VALUES|VALUE}({expr|DEFAULT},……),(……),……
使用 INSERT …… SET 语句插入部分列值数据
INSERT [INTO] tb1_name SET col_name = {expr|DEFAULT},……
使用 INSERT …… SELECT 语句插入子查询数据
INSERT [INTO] tb1_name [(col_name,……)] SELECT ……
DELETE FROM tb1_name [WHERE where_condition][ORDER BY ……][LIMIT row_count]
UPDATE tb1_name SET col_name1 = {expr1|DEFAULT}[,col_name2 = {expr2|DEFAULT}]……[WHERE where_condition][ORDER BY ……][LIMIT row_count]
是 SQL 语言的核心功能。
SELECT[ALL|DISTINCT|DISTINCTROW]select_expr[,select_expr ...]FROM table_references[WHERE where_condition][GROUP BY {col_name|expr|position} [ASC|DESC], ... [WITH ROLLUP]][HAVING where_condition][ORDER BY {col_name|expr|position} [ASC|DESC], ...][LIMIT {[offset,]row_count|row_count OFFSET offset}]
最简单的形式是 “SELECT select_expr”。
选择指定的列
选择一个或多个表中的某个或某些列作为 SELECT 语句的查询列。
定义并使用列的别名
column_name [AS] column_alias
替换查询结果集中的数据
CASEWHEN 条件1 THEN 表达式1WHEN 条件2 THEN 表达式2...ELSE 表达式END [AS] column_alias
计算列值
方法是将 SELECT 语句的语法项 “select_expr” 指定为对应列参与计算的表达式。
聚合函数
SELECT 语句的语法项 “select_expr” 也可以指定为聚合函数。聚合函数通常是数据库系统中一类系统内置函数,常用于对一组值进行计算,然后返回单个值。它通常与 GROUP BY 子句一起使用。
常用的聚合函数:
函数名 | 说明 |
---|---|
COUNT | 求组中项数,返回 INT 类型整数 |
MAX | 求最大值 |
MIN | 求最小值 |
SUM | 返回表达式中所有值的和 |
AVG | 求组中值的平均值 |
STD/STDDEV | 返回给定表达式中所有值的标准值 |
VARIANCE | 返回给定表达式中所有值的方差 |
GROUP_CONCAT | 返回由属于一组的列值连接组合而成的结果 |
BIT_AND | 逻辑与 |
BIT_OR | 逻辑或 |
BIT_XOR | 逻辑异或 |
SELECT 子句的查询对象是由 FROM 子句指定的,可根据用户的查询需求实现单表或多表查询。若一个查询同时涉及到一个或两个以上的表,则称之为多表连接查询,也称多表查询或连表查询。为了减少冗余,以及增强数据库的稳定性和灵活性,在表与表之间通过设置 “键” 的方式来保持多表之间的连接关系。多表连接查询是关系数据库中最主要的查询。
连接方式主要包括:
交叉连接
又称笛卡尔积
内连接
是一种最常用的连接类型,它是通过在查询中设置连接条件的方式,来移除查询结果集中某些数据行之后的交叉连接。
通过 FROM 子句中的关键字 “INNER JOIN” 连接两张表:
SELECT some_columnsFROM table1INNER JOIN table2 ON some_conditions
等值连接
在 FROM 子句中使用关键字 “INNER JOIN” 或 “JOIN” 连接两张表时,如若在 ON 子句中的连接条件中使用运算符 “=”(即等号),即进行相等性测试,则此连接方式称为等值连接,也称为相等连接。在等值连接的条件设置中会包含一个主键和一个外键。
非等值连接
在 FROM 子句中使用关键字 “INNER JOIN” 或 “JOIN” 连接两张表时,如若在 ON 子句的连接条件中使用除运算符 “=” 之外的其他比较运算符,即进行不相等性测试,则此连接方式称为非等值连接,也称不等连接。
自连接
在 FROM 子句中使用关键字 “INNER JOIN” 或 “JOIN” 连接两张表时,可以将一个表与它自身进行连接,这种连接方式称为自连接。
外连接
外连接是首先将两张表分为基表和参考表,然后再以基表为依据返回满足和不满足条件的记录。
左外连接
也称左连接。在 FROM 子句中使用关键字 “LEFT OUTER JOIN” 或关键字 “LEFT JOIN” 来连接两张表。
右外连接
也称右连接。在 FROM 子句中使用关键字 “RIGHT OUTER JOIN” 或关键字 “RIGHT JOIN” 来连接两张表。
比较运算
用于比较两个表达式的值:
比较运算符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
<=> | 不会返回 UNKNOW |
判断范围
BETWEEN ... AND
expression [NOT] BETWEEN expression1 AND expression2
IN
expression IN (expression[,...])
判断空值
expression IS [NOT] NULL
子查询
表子查询
子查询返回的结果集是一个表。
行子查询
子查询返回的结果集是带有一个或多个值的一行数据。
列子查询
子查询返回的结果集是一列数据,该列可以有一行或多行,但每行只有一个值。
标量子查询
即子查询返回的结果集仅仅是一个值。
子查询与关键字 “IN” “EXIST” 和比较运算符结合使用:
结合关键字 “IN”
expression [NOT] IN (subquery)
结合比较运算符使用
expression {=|<=|>|>=|<=>|<>|!=}{ALL|SOME|ANY}(subquery)
结合关键字 “EXIST”
EXIST(subquery)
允许使用 GROUP BY 子句,将结果集中的数据行 genuine 选择列的值进行逻辑分组,以便能汇总表内容的子集,即实现对每个组的聚集计算。
GROUP BY {col_name|expr|position}[ASC|DESC],...[WITH ROLLUP]
使用需注意以下几点:
HAVING where_condition # where_condition 用于指定过滤条件
HAVING 子句与 WHERE 子句非常相似,HAVING 子句支持 WHERE 子句中所有的操作符和句法,但两者之间仍存在以下几点差异:
ORDER BY {col_name|expr|position}[ASC|DESC],...
使用 LIMIT 子句来限制被 SELECT 语句返回的行数。
LIMIT {[offset,]row_count OFFSET offset}
外模式对应到数据库中的概念就是视图。视图是数据库中的一个对象,它是数据库管理系统提供给用户的以多种角度观察数据库中数据的一种重要机制。
视图仍不同于数据库中真实存在的基本表,它们存在以下区别:
使用视图有以下优点:
CREATE VIEW view_name[(column_list)] AS select_statement [WITH[CASCADED|LOCAL]CHECK OPTION]
DROP VIEW [IF EXISTS]view_name[,view_name]...[RESTRICT|CASCADE]
ALTER VIEW view_name[(column_list)]AS select_statement [WITH[CASCADED|LOCAL]CHECK OPTION]
SHOW CREATE VIEW view_name
视图是一个虚拟表,通过插入、修改和删除等操作方式来更新视图中的数据,实质上是更新视图所引用的基本表中的数据。对于更新的视图,需要该视图中的行和基本表中的行之间具有一对一的关系。
使用 INSERT 语句通过视图向基本表插入数据
# 例如在数据库 mysql_test 中,向视图 customer_view 插入一条记录:(909,"周明","M","武汉市","洪山区")INSERT INTO mysql_test.customer_view VALUES(909,"周明","M","武汉市","洪山区")
使用 UPDATE 语句通过视图修改基本表的数据
# 例如将视图 customers_view 中所有客户的 cust_address 列更新为 “上海市”UPDATE mysql_test.customer_view SET cust_address = "上海市"
使用 DELETE 语句通过视图删除基本表的数据
# 例如删除 “周明” 信息DELETE FROM mysql_test.customer_view WHERE cust_name = "周明"
对于依赖多个基本表的视图,不能使用 DELETE 语句。
视图用于查询检索,主要体现的应用:
存储过程是一组为了完成某项特定功能的 SQL 语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的 SQL 语句(如 CREATE、UPDATE 和 SELECT 等语句)和过程式 SQL 语句(如 IF ... THEN ... ELSE 控制结构语句)组成。
使用存储过程通常具有以下一些好处:
DELIMITER 命令将 MySQL 语句的结束标志临时修改为其他符号,从而使得 MySQL 服务器可以完整地处理存储过程体中所有的 SQL 语句,而后可通过 DELIMITER 命令再将 MySQL 语句的结束标志改为 MySQL 的默认结束标志,即分号(;)。
DELIMITER 命令的使用语法格式:
DELIMITER $$
在 MySQL 中,是使用 CREATE PROCEDURE 语句来创建存储过程,其常用的语法格式:
CREATE PROCEDURE sp_name([proc_parameter[,...]])Routine_body
其中,语法项 "proc_parameter" 的语法格式:
[IN|OUT|INOUT]param_name type
在此语法格式中:
局部变量
在存储过程体中可以声明局部变量,用来存储存储过程体中的临时结果。在 MySQL 中,可以使用 DECLARE 语句来声明局部变量,并且同时还可以对该局部变量赋予一个初始值,其使用语法格式是:
DECLARE var_name[,...] type [DEFAULT value]
其中,语法项 "var_name" 用于指定局部变量的名称;语法项 "type" 用于声明局部变量的数据类型;DEFAULT 子句用于为局部变量指定一个默认值,若没有指定,则默认为 NULL。
注意事项如下:
SET 语句
在 MySQL 中,可以使用 SET 语句为局部变量赋值,其使用的语法格式是:
SET var_name = expr[,var_name = expr]...
SELECT ... INTO 语句
在 MySQL 中,可以使用 SELECT ... INTO 语句把指定列的值直接存储到局部变量中,其使用的语法格式是:
SELECT col_name[,...] INTO var_name[,...] table_expr
在此语格式中,语法项 "col_name" 用于指定列名;语法项 "var_name" 用于指定要赋值的变量名;语法项 "table_expr" 表示 SELECT 语句中的 FROM 子句及后面的语法部分。此外,需要注意的是,存储过程体中的 SELECT ... INTO 语句返回的结果集只能有一行数据。
流程控制语句
条件判断语句
常用的条件判断语句有 IF ... THEN ... ELSE 语句和 CASE 语句。它们的使用语法及方式类似于高级程序设计语言。
循环语句
常用的循环语句有 WHILE 语句、REPEAR 语句和 LOOP 语句。它们的使用语法及方式同样类似于高级程序设计语言。此外,循环语句中还可以使用 ITERATE 语句,但它只能出现在循环语句的 LOOP、REPEAT 和 WHILE 子句中,用于表示退出当前循环,且重新开始一个循环。
游标
游标是一个被 SELECT 语句检索出来的结果集。
具体步骤如下:
声明游标
DECLARE cursor_name CURSOR FOR select_statement# cursor_name 用于指定要创建的游标名称,其命名规则与表名相同# select_statement 用于指定一个 SELECT 语句,其会返回一行或多行的数据,且需注意此处的 SELECT 语句不能有 INTO 子句
打开游标
OPEN cursor_name# cursor_name 用于指定要打开的游标
读取数据
FETCH cursor_name INTO var_name[,var_name]...# cursor_name 用于指定已打开的游标# var_name 用于指定存放数据的变量名
关闭游标
CLOSE cursor_name# cursor_name 用于指定要关闭的游标
使用游标需注意:
CALL sp_name[parameter[,...]]CALL sp_name[()]# sp_name 用于指定被调用的存储过程名称。如果要调用某个特定数据库的存储过程,则需要在前面加上该数据库的名称。# parameter 用于指定调用存储过程所要使用的参数。调用语句中参数的个数必须等于存储过程的参数个数。# 当调用没有参数的存储过程时,使用 CALL sp_name() 语句与使用 CALL sp_name 语句是相同的。
DROP PROCEDURE [IF EXISTS] sp_name# sp_name 用于指定要删除的存储过程名称
存储函数与存储过程的区别:
CREATE FUNCTION sp_name([func_parameter[,...]])RETURNS typeroutine body# func_parameter 的语法格式是 param_name type# sp_name 用于指定存储函数的名称,需注意,存储函数不能与存储过程具有相同名字。# func_parameter 用于指定存储函数的参数,这里的参数只有名称和类型,不能指定关键字 "IN"、"OUT" 和 "INOUT"。# RETURNS 子句用于声明存储函数的返回值的数据类型,其中 type 用于指定返回值的数据类型。# routine body 用于指定存储函数的主题部分,也称为存储函数体。所有在存储过程中使用的 SQL 语句在存储函数中同样也适用,包括前面所介绍的局部变量、SET 语句、流程控制语句、游标等。但是,存储函数体中还必须包含一个 RETURN value 语句,其中 value 用于指定存储函数的返回值。
成功创建存储函数后,就可以如同调用系统内置函数一样,使用关键字 SELECT 进行调用,其使用语法格式是:
SELECT sp_name([func_parameter[,...]])
DROP FUNCTION [IF EXISTS] sp_name# sp_name 用于指定要删除的存储函数的名称
数据库完整性是指数据库中数据的正确性和相容性。
数据完整性约束是为了防止数据库中存在不符合语义的数据,为了维护数据的完整性,DBMS 必须提供一种机制来检查数据库中的数据,以判断其是否满足语义规定的条件。这些加在数据库之上的语义约束条件就是数据库完整性约束,而 DBMS 检查数据是否满足完整性约束条件的机制就称为完整性检查。
完整性检查是围绕完整性约束条件进行的,因而完整性约束条件是完整性控制机制的核心。完整性约束条件的作用对象可以是列、元组和表。
列级约束
主要是指对列的类型、取值范围、精度等的约束,具体包括如下内容:
元组约束
指元组中各个字段之间的相互约束,例如某个活动的开始日期小于结束日期。
表级约束
指若干元组之间、关系之间的联系的约束。
关系模型的完整性规则是对关系的某种约束条件,有 3 类完整性约束:
实体完整性
主键约束
主键可以是表中的某一列,也可以是表中多个列所构成的一个组合。其中,由多个列组合而成的主键也称为复合主键。在 MySQL 中,主键列必须遵守如下一些规则:
主键约束可以在 CREATE TABLE 或 ALTER TABLE 语句中使用关键字 PRIMARY KEY 来实现,实现方式有两种:
候选键约束
候选键可以是表中的某一列,也可以是表中的多个列所构成的一个组合。任何时候,候选键的值必须是唯一的,且不能为 NULL。候选键可以在 CREATE TABLE 或 ALTER TABLE 语句中使用关键字 UNIQUE 来定义,其实现方法与主键约束相似,同样可以作为列或表的完整性约束两种方式。
MySQL 中候选键与主键之间存在以下几点区别:
参照完整性
在 MySQL 中,参照完整性是通过在创建表 CREATE TABLE 或更新表 ALTER TABLE 的同时定义一个外键声明来实现的。其中,外键声明有两种方式:
reference_definition 语法项的定义:
REFERENCES tb1_name(index_col_name,...)[ON DELETE reference_option][ON UPDATE reference_option]# tb1_name 指定外键所参照的表名,这个表称为被参照表(或父表),而外键所在的表称为参数表(或子表)# col_name 指定被参照表的列名# ON DELETE、ON UPDATE 指定参照动作相关的 SQL 语句# reference_option 指定参照完整性约束的实现策略
index_col_name 的语法格式:
RESTRICT|CASCADE|SET NULL|NOT ACTION
在指定外键时,需要遵守以下规则:
用户定义的完整性
非空约束
在 MySQL 中,非空约束可以通过在 CREATE TABLE 或 ALTER TABLE 语句中的某个列定义后面,加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。
CHECK 约束
与非空约束一样,CHECK 约束也是在创建表或更新表的同时,根据用户的实际完整性要求来定义的,语法格式是:
CHECK(expr)# expr 是一个 SQL 表达式,用于指定需要检查的限定条件
CONSTRAINT[symbol]# symbol 是指定的约束名字,这个名字是在完整性约束前面被定义,其在数据库里必须是唯一的。倘若没有明确给出约束名字,则 MySQL 自动创建一个约束名字。
当对各种约束进行命名后,就可以使用 ALTER TABLE 语句来更新与列表有关的各种约束,需注意:
触发器是用户定义在关系表上的一类由事件驱动的数据库对象,也是一种保证数据完整性的方法。触发器一旦定义,无需用户调用,任何表的修改操作均由数据库服务器自动激活相应的触发器。触发器与表的关系十分密切,其主要作用是实现主键和外键不能保证复杂的参照完整性和数据一致性,从而有效地保护表中的数据。
CREATE TRIGGER trigger_name trigger_time trigger_eventON tb1_name FOR EACH ROW trigger_body# trigger_name 用于指定触发器的名称,触发器在当前数据库必须具有唯一的名称,如果要在某个特定数据库中创建,名称前面应加上数据库的名称# trigger_time 指定触发器的触发时刻,它有两个选项,即关键字 BEFORE 和 AFTER,用于表示触发器是在激活它的语句之前或之后触发。如果希望验证新数据是否满足使用限制,则使用 BEFORE 选项;如果希望在激活触发器的语句执行之后完成几个或更多的改变,通常使用 AFTER 选项# trigger_event 指定触发事件,即指定激活触发器的语句的种类,其可以是下述值之一:关键字 INSERT,表示将新的数据行插入到表时激活触发器;关键字 UPDATE,表示更改表中某一行数据时激活触发器;关键字 DELETE,表示从表中删除某一行时激活触发器# tb1_name 指定与触发器相关联的表名,必须引用永久性表,不能将触发器与临时表或视图关联起来,且同一个表不能拥有两个具有相同触发时刻和事件的触发器# FOR EACH ROW 指定对于受触发事件影响的每一行都要激活触发器的动作# trigger_body 指定触发器动作主体,即包含触发器激活时将要执行的 MySQL 语句,如果要执行多个语句,可使用 BEGIN ... END 复合语句结构
DROP TRIGGER [IF EXISTS] [schema_name.] trigger_name# IF EXISTS 用于避免在没有触发器的情况下删除触发器# schema_name 指定触发器所在的数据库的名称,若没有指定,则为当前默认数据库# trigger_name 指定要删除的触发器名称
INSERT 触发器
可在 INSERT 语句执行前后执行,使用时需注意:
DELETE 触发器
可在 DELETE 语句执行前后执行,使用时需注意:
UPDATE 触发器
可在 UPDATE 语句执行前后执行,使用时需注意:
MySQL 的用户账号及相关信息都存储在一个名为 mysql 的 MySQL 数据库中,这个数据库里有一个名为 user 的数据表,包含了所有的用户账号,并且它用一个名为 user 的列存储用户的登录名。
# 查看 MySQL 数据库的使用账号select user from mysql.user
创建用户账号
CREATE USER user [IDENTIFIED BY [PASSWORD] "password"]# user 指定创建用户账号,其格式为 "user_name"@"host_name",其中,user_name 表示用户名,host_name 表示主机名,即用户连接 MySQL 时所在主机的名字。如果在创建过程中,只给出了账户中的用户名,而没指定主机名,则主机名会默认为是 “ ”,其表示一组主机# IDENTIFIED BY 是可选项,指定用户账号对应的口令,若该用户账号无口令,则可省略此子句# PASSWORD 是可选项,指定散列口令,即若使用明文设置口令时,而忽略 PASSWORD 关键字;如果不想以明文设置口令,且知道 PASSWORD() 函数返回给密码的散列值,则可以在此口令设置语句中指定此散列值,但需加上关键字 PASSWORD# password 指定用户账号的口令,其在 IDENTIFIED BY 关键字或 PASSWORD 关键字之后,设置的口令值可以只有字母和数字组成的明文,也可以是通过 PASSWORD() 函数得到的散列值
在使用时需注意:
删除用户
删除一个或多个用户账号及相关权限
DROP USER user[,user]...
使用时需注意:
修改用户账号
RENAME USER old_user TO new_user[,old_user TO new_user]...
使用时需注意:
修改用户口令
SET PASSWORD[FOR user]={PASSWORD("new_password")|"encrypted password"}
使用时需注意:
权限的授予
GRANT Pri_type[(column_list)][,pri_type[(column_list)]]...ON [object_type] priv_levelTO user_specification[,user_specification]...[WITH GRANT OPTION]# pri_type 指定权限的名称# column_list 指定权限要授予给表中的哪些具体的列# ON 指定权限授予的对象和级别# object_type 指定权限授予的对象类型,包括表、函数和存储过程,分别用关键字 TABLE、FUNCTION 和 PROCRDURE 标识# priv_level 指定权限的级别,其可以授予的权限有这样几个:列权限、表权限、数据库权限和用户权限。相应的,在 GRANT 语句中可用于指定权限级别的值有这样几类格式:“*” 表示当前数据库中的所有表;“*.*” 表示所有数据库中的所有表;“db_name*” 表示某个数据库中的所有表,db_name 指定数据库名;“db_name.tb1_name” 表示某个数据库中的某个表或视图,db_name 指定数据库名,tb1_name 指定表名或视图名;“db_name.routine_name” 表示某个数据库中的某个存储过程或函数,rountime_name 指定存储过程名或函数名# TO 用来设定用户的口令,以及被授予权限的用户 user。若在 TO 子句中给系统中存在的用户指定口令,则新密码会将原密码覆盖;如果权限被授予给一个不存在的用户,MySQL 会自行执行一条 CREATE USER 语句来创建这个用户,但同时必须为该用户指定口令。由此可见,GRANT 语句也可用于创建用户账号# user_specification 是 TO 子句中的具体描述部分,其常用的语法格式是:user[IDENTIFIED BY[PASSWORD] "password"]# WITH 子句为可选项,实现权限的转移或限制
使用时需注意:
授予表权限时,语法项 priv_type 可以指定为以下值:
SELECT
授予用户可以使用 SELECT 语句访问特定的表的权限
INSERT
授予用户使用 INSERT 语句向一个特定的表中添加数据行的权限
DELETE
授予用户可以使用 DELETE 语句向一个特定表中删除数据行的权限
UPDATE
授予用户可以使用 UPDATE 语句修改特定数据表中值的权限
REFERENCES
授予用户可以创建一个外键来参照特定数据表的权限
CREATE
授予用户可以使用特定的名字创建一个数据表的权限
ALTER
授予用户可以使用 ALTER TABLE 语句修改数据表的权限
INDEX
授予用户可以在表上定义索引的权限
DROP
授予用户可以删除数据表的权限
ALL 或 ALL PRIVILEGES
表示所有的权限名
授予权限时,语法项 priv_type 的值只能指定为 SELECT、INSERT 和 UPDATE,同时权限的后面需要加上列名列表 column_list
授予数据库权限时,语法项 priv_type 可以指定为以下值:
SELECT
授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限
INSERT
授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限
DELETE
授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限
UPDATE
授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限
REFERENCES
授予用户可以创建指向特定数据库中表外键的权限
CREATE
授予用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限
ALTER
授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限
INDEX
授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限
DROP
授予用户可以删除特定数据库中所有表和视图的权限
CREATE TEMPORARY TABLES4
授予用户可以在特定数据库中创建临时表的权限
CREATE VIEW
授予用户可以在特定数据库中创建新的视图的权限
SHOW VIEW
授予用户可以查看特定数据库中已有视图的视图定义的权限
CREATE ROUTINE
授予用户可以为特定数据库创建存储过程和存储函数等权限
ALTER ROUTINE
授予用户可以更新和删除数据库中已有的存储过程和存储函数等权限
EXECUTE ROUTINE
授予用户可以调用特定数据库的存储过程和存储函数的权
LOOK TABLES
授予用户可以锁定特定数据库的已有数据表的权限
ALL 或 ALL PRIVILEGES
表示所有权限名
最有效率的权限是用户权限。授予权限时,语法项 priv_type 除了可以指定为授予数据库权限时的所有值之外,还可以是下面这些值:
CREATE USER
授予用户可以创建和删除新用户的权限
SHOW DATABASES
授予用户可以使用 SHOW DATABASES 语句查看所有已有数据库定义的权限
权限的转移
权限转移可以通过 GRANT 语句中使用 WITH 子句来实现。如果将 WITH 子句指定为关键字 WITH GRANT OPTION,则表示 TO 子句中所指定的所有用户都具有把自己所拥有的权限给其他用户的权力,而无论那些其他用户是否拥有该权限。
用户的撤销
# 回收用户的某些权限REVOKE priv_type[(column_list)][,priv_type[(column_list)]]...ON [object_type] priv_levelFROM user[,user]...# 回收用户的所有权限REVOKE ALL PRIVILEGES,GRANT OPTION FROM user[,user]...
原子性
事务的原子性保证事务包含的一组更新操作是原子不可分的,即事务是不可分割的最小工作单元,所包含的这些操作是一个整体
一致性
一致性要求事务必须满足数据库的完整性约束,且事务执行完毕后将数据库由一个一致性状态转变为另一个一致性状态。其中,数据库的一致性状态是一种以一致性规则为基础的逻辑属性
隔离性
隔离性要求事务是彼此独立的、隔离的,即一个事务的执行不能被其他事务所干扰,一个事务对数据库变更的结果必须在它 COMMIT 后,另一个事务才能存取
持续性
持续性也称为持久性,是指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,且接下来的其他操作或故障不应该对其执行结果有任何影响
事务是并发控制的基础单位,保证事务的 ACID 特征是事务处理的重要任务,而事务的 ACID 特征可能遭到破坏的原因之一是多个事务对数据库的并发操作。为了保证事务的隔离性和一致性,DBMS 需要对并发操作进行正确调度。其中,完整性校验可以保证一个事务单独执行时,若输入的数据库状态是正确的,则其输出的数据库状态也是正确的。但当多个事务交错执行时,可能出现不一致问题,这也都称为并发操作问题,典型的有如下三种:
丢失更新
设有两个事务 T1 和 T2,当它们同时读入同一数据并加以修改时,事务 T2 的提交结果会破坏事务 T1 的提交结果,由此导致事务 T1 的修改被丢失。这就是一种由于对数据的并发操作而带来的数据不一致
不可重复读
包括三种情况:
读脏数据
设有两个事务 T1 和 T2,读脏数据是指事务 T1 修改某一数据,并将其写回磁盘,事务 T2 读取同一数据后,事务 T1 由于某种原因被撤销,这时事务 T1 已修改过的数据恢复原值,事务 T2 读到的数据就与数据库中的数据不一致,则事务 T2 读到的数据称为脏数据,即不正确的数据。
解决并发控制所带来的数据不一致问题的方法有封锁、时间戳、乐观控制法和多版本并发控制等。
封锁是常用的并发控制技术,它的基本思想是:需要时,事务通过向系统请求对它所希望的数据对象加锁,以确保它不被非预期改变。
锁
一个锁实际上就是允许或组织一个事务对一个数据对象的存取特权。基本的封锁类型有两种:排他锁和共享锁。
用封锁进行并发控制工作原理:
因此,利用封锁机制可以解决并发操作所带来的三个不一致问题。
封锁的粒度
以粒度来描述封锁的数据单元大小。DBMS 可以决定不同粒度的锁,由最底层的数据元素到最高层的整个数据库,粒度越细,并发性就越大,但软件复杂性和系统开销也就越大。
封锁的级别
封锁的级别又称为一致性级别或隔离度,由各种锁的类型与其封锁期限组合可形成不同的封锁级别:0~3 级封锁。
活锁与死锁
在并发事务处理过程中,由于锁会使一事务处于等待状态而调度其他事务处理,因而该事务可能会因优先级低而永远等待下去,这种现象称为 “活锁”。活锁问题的解决与调度算法有关,一种最简单的办法是 “先来先服务”。两个以上事务循环等待被同组中另一事务锁住的数据单元的情形,称为 “死锁”,DBMS 需要提供提供死锁预防、死锁检测和死锁发生后的处理技术与方法。预防死锁的办法在操作系统中已普遍讨论,其主要有以下几种:
可串行性
一组事务的一个调度就是它们的基本操作的一种排序。若在一个调度中,对于任意两个事务 T1 和 T2,要么 T1 所有操作都在 T2 所有操作之前,要么反之,则该调度是串行的,因而是正确的。
通常,在数据库系统中,可串行性就是并发执行的正确性准则,即当且仅当一组事务的并发执行调度是可串行化,才认为它们是正确的。
两段封锁法
采用两段封锁法是一种最简单而有效的保障封锁其调度是可串行的方法,两段锁协议规定在任何一个事务中,所有加锁操作都必须在所有释放锁操作之前。其中,事务划分为如下两个阶段:
定理:遵循两段锁协议的事务的任何并发调度都是可串行化的。
会造成数据库运行事务异常中断的因素可能是:
备份与恢复策略来保证数据库中数据的可靠性与完整性。数据备份是指通过导出数据或者复制表文件的方式制作数据库的副本;数据库恢复则是当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库从错误状态恢复到备份时的正确状态。数据库的恢复是以备份为基础的,它是与备份相对应的系统维护和管理操作。
SELECT * INTO OUTFILE "file_name" export_options|INTO DUMPFILE "file_name"# export_options 的格式[FIELDS [TERMINATED BY "string"] [[OPTIONALLY]ENCLOSED BY "char"] [ESCAPED BY "char"]][LINES TERMINATED BY "string"]# file_name 指定数据备份文件的名称# 导出语句中使用关键字 OUTFILE 时,可以在语法项 export_options 中加入两个自选的子句,即 FIELDS 子句和 LINES 子句,它们的作用是决定数据行在备份文件中的存储格式。如果 FIELDS 子句和 LINES 子句都不指定,则默认声明的是子句 FIELDS TERMINATED BY "\t" ENCLOSED BY ESCAPED BY "\\" LINES TERMINATED BY "\n"# FIELDS 子句中有三个亚子句,分别是 TERMINATED BY 子句、[OPTIONALLY]ENCLOSED BY 子句和 ESCAPED BY 子句。如果指定了 FIELDS 子句,则这三个亚子句中至少要求指定一个。其中,TERMINATED BY 子句用来指定字段之间的符号。# 在 LINES 子句中使用关键字 TERMINATED BY 指定一个数据行结束的标志# 导出语句中使用的是关键字 DUMPFILE 而非 OUTFILE 时,导出的备份文件里面所有的数据行都会彼此紧挨着放置,即值和行之间没有任何标记。
LOAD DATA INFILE "file_name.txt"INTO TABLE tb1_name[FIELDS [TERMINATED BY "string"] [[OPTIONALLY] ENCLOSED BY "char"] [ESCAPED BY "char"]][LINES [STARTING BY "string"] [TERMINATED BY "string"]]# file_name 指定待导入的数据库备份文件名,文件中保持了待载入数据库的所有数据行# tb1_name 指定需要导入的数据库的表名# 此处的 FIELDS 子句和 SELECT * INTO OUTFILE 语句中的 FIELDS 子句类似,用于判断字段之间的数据行之间的符号# 语法项 LINES 子句中的 TERMINATED BY 亚子句用来指定一行结束的标志;STARTING BY 亚子句则指定一个前缀,导入数据行时,忽略数据行中的该前缀与前缀之前的内容。如果某行不包括该前缀,则整个数据行被跳过。
层次数据库系统和网状数据库系统的关系
两者的数据模型虽然分别为层次模型和网状模型,但实质上层次模型是网状模型的特例。它们都是格式化模型,它们从体系结构、数据库语言到数据存储管理均具有共同特征,是第一代数据库系统。
第一代数据库系统两类代表
两类数据库系统具有的共同特点
计算机系统中存在着两类不同的数据处理工作:一类是操作型处理,也称联机事务处理,另一类是分析型处理,也称联机分析处理。
事务型处理数据和分析型处理数据的区别:
特性 | OLTP | OLAP |
---|---|---|
特征 | 操作处理 | 信息处理 |
面向 | 事务 | 分析 |
用户 | 办事员、DBA、数据库专业人员 | 知识工人(如经理、主管、分析员) |
功能 | 日常操作 | 长期信息需求,决策支持 |
DB 设计 | 基于 E-R,面向应用 | 星形/雪花,面向主题 |
数据 | 当前的,确保最新 | 历史的,跨时间维护 |
汇总 | 原始的,高度详细 | 汇总的,统一的 |
视图 | 详细,一般关系 | 汇总的,多维的 |
工作单位 | 短的、简单事务 | 复杂查询 |
存取 | 读写 | 大多为读 |
关注 | 数据进入 | 信息输出 |
操作 | 主关键字上索引/散列 | 大量扫描 |
访问记录数 | 数十个 | 数百万个 |
用户数 | 数千 | 数百 |
DB 规模 | 100 MB 到 GB | 100 GB 到 TB |
优先 | 高性能、高可用性 | 高灵活性,端点用户自治 |
度量 | 事务吞吐量 | 查询吞吐量,响应时间 |
数据仓库的建立将操作型处理和分析型处理区分开来。传统的数据库技术为操作型处理服务,数据仓库为分析性处理服务。
1992 年数据仓库概念的创始人 W.H.Inmon 在其《Building the Data Warehouse》一书中定义了数据仓库的概念:数据仓库是面向主题的、集成的、稳定的、随时间变化的数据集合,用以支持管理决策的过程。
数据仓库的特征:
数据仓库三个常用的重要概念
粒度
指数据仓库的数据单位中保存数据的细化或综合程度的级别,细化程度越高,粒度级就越小,相反地,细化程度越低,粒度级就越大。
分割
是将数据分散到各自的物理单元中,以便能分别处理,以提高数据处理的效率。数据分割后的单元称为切片。
维
是人们观察数据的特定角度,是考虑问题时的一类属性。此类属性的集合构成了一个维度,例如时间维、产品维等。
数据仓库有时也称企业仓库。建设数据仓库是一项庞大的系统工程,为此,人们提出数据集市体系结构的数据仓库概念。数据集市分为独立的数据集市和从属的数据集市或两种数据集市的混合。
数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中发现并提取隐藏在其中的、人们事先不知道的、但又是潜在有用的信息和知识的一种技术。它又称为数据库中的知识发现,其与数据库、数据统计、机器学习、模式识别、模糊教学等诸多技术相关。
数据处理不是数据挖掘
OLAP 与数据挖掘的区别:
在数据仓库技术中,OLAP 是数据汇总/聚集工具,可帮助简化数据分析,而数据挖掘是自动地发现隐藏在大量数据中的隐含模式和有趣知识;OLAP 工具的目标是简化和支持交互式数据分析,而数据挖掘工具的目标是尽可能自动处理。在这种意义下,数据挖掘比传统的联机分析处理前进了一步。
数据挖掘具备的功能
在实际使用中,数据挖掘的过程通常由六个步骤构成
大数据存储
NoSQL 数据管理系统
NoSQL 是以互联网大数据应用为背景发展起来的分布式数据管理系统。NoSQL 由两种解释:一种是 Non-Relational,即非关系数据库;另一种是 Not Only SQL,即数据管理技术不仅仅是 SQL。
NoSQL 系统为了提高存储能力和并发读写能力采用了极其简单的数据模型,支持简单的查询操作,而将负责操作留给应用层实现。该系统对数据进行划分,对各个数据区进行备份,以应对结点可能失败问题,提高系统的可用性;通过大量节点的并行处理获得高性能,采用的是横向扩展的方式。弥补了传统数据库由于事务等机制而带来的对海量数据高并发请求处理性能上的欠缺,采用一种非关系的方式来解决大数据存储和管理的问题。
NoSQL 系统支持的数据存储模型
键值(Key-Value)存储
是 NoSQL 数据库采用最多的数据存储方式。适合通过主键进行查询或遍历,但基本上只能通过 Key 的完全一致查询获取数据。常见的键值存储数据库包括 Tokyo Cabinet/Tyrant、Redis 和 Oracle BDB 等。
文档存储
适合存储系统日志等非结构化数据,可以通过复杂的查询条件来获取数据。常见的文件型数据库有 CouchDB、MongoDB 等。
列存储
是以列为单位来存储数据的,擅长以列为单位读入数据,比较适合对某一列进行随机查询处理,主要应用于需要处理大量数据的情况。常见的列存储数据库有 Cassandra、HBase 等。
图存储
图存储数据库是基于图理论构建的,使用特点、属性和边的概念。
MapReduce 技术
标签:
04735-数据库系统原理人生最大的遗憾,往往并不是没有去做,而是没有坚持;明明只要再坚持努力一丢丢,却选择放弃,与成功失之交臂。一、数据
日前,有消息传出,俏江南创始人张兰欠CVC基金1 42亿美元(合人民币9 8亿元),正被CVC全球追债。张兰名下位于美国纽约的一套公寓被判决归CVC
随着天气的逐渐回暖,一幅春耕图画正在田间地头、大棚基地徐徐展开,呈现出一派“人勤春来早”的喜人景象,成为中华大地上一道美
根据中央气象台最新消息4月份上旬有一股新的较强寒潮天气影响我国,不会给我国中东部、华北、西北、西南、东北等地地区带来了高温天气。因为北
哀溺文,哀溺这个很多人还不知道,现在让我们一起来看看吧!1、哀溺文柳宗元永之氓咸善游,一日,水暴甚,有五六氓乘小船绝湘水。2、中济,船破
3月29日,中学生在校园流动科普巡展中体验趣味科学装置。当日,北京第五中学举办校园科技嘉年华“数学科普主题日”活动,将北京科学中心的...
湖南投资(000548)(000548):第2次董事会会议决议,审议《公司2022年度总经理工作报告》等议案3月30日,湖南投资公告显示,公司第2次董事会会议
1、罪恶王冠的结局:涯复活了,砍了集的右手,夺取了王之能力,但集获取第三只基因,再次使用王之能力,真名利用祈的身体复活,
海口养老买房子在哪买好?晶莹花园适合老人养老!海口房价强烈上升,晶莹花园房价能上涨多少?晶莹花园房价趋势全面剖析,海南陈霞给你详细的
别逗了,你哪有资格当左派?,高尚,陆游,左派,右派,王思聪,资本家
1、乜拼音:miēniè 注音:ㄇㄧㄝㄋㄧㄝˋ部首:乙,部外笔画:1,总笔画:2。本文分享完毕
videocardz曝光了PowerColor的RX590显示卡的第一张照片。PowerColor-Radeon-RX
3月29日,有网友发文称,江西某高校一男生躲在女厕内被抓,此事引发广泛关注。网友发布的文章显示,3月26日晚,江西中医药大学一名男生进入学
中新网3月29日电题:中移智库挂牌发布首批报告中新财经记者刘育英中国移动28日举办中移智库揭牌仪式,并举办数智创新发展论坛。中移智库还成立
失业后,失业金到底应当不应当领?领取失业保险金有哪些好处?注意这几个方面首先,领取失业金的条件、能领多久、能领多少?一
俱乐部老板弗里德金对穆里尼奥的带队成绩是满意的,毕竟罗马和其他豪门俱乐部相比底蕴更薄弱,去年夏天也只在转会窗口投资900万欧元,如塔希姆
系统之家最新消息,微软3月29日在发布的最新Win1121H2补丁,补丁号KB5023774,版本号升至22000 1761。在系统安装更新后会出现无法通过Rockstar
ROG游戏手机官宣:将在4月13日举行新品发布会,ROG游戏手机7系列将会正式发布。有博主曝光了新机的配置,处理器将会采用骁龙8Gen2,并且配备LP
郑商所:现对2023年清明节期间夜盘交易时间提示如下:2023年4月4日当晚不进行夜盘交易。2023年4月6日8:55-9:00为所有期货、期权合约的集合竞价
我,在Web3,赚了100万,传销,矿机,炒币,比特币,莱特币
大家好,小乐来为大家解答以上的问题。怎样辨别ysl口红真伪查询,怎样辨别ysl口红真伪这个很多人还不知道,现在让我们一起来看看吧!1、口红
1、迟缓【拼音】chíhuǎn 【解释】缓慢。2、【出处】《后汉书·孔融传》:“性既迟缓,与人无伤。3、” 唐韩愈《游青龙寺赠崔大补阙》诗...
近日,张家界市市场监管局对全市粮油销售领域开展专项排查,加强对大米市场监管,规范大米市场经营行为,严防“问题大米”流入市场。
宋奕洋:3 29黄金震荡反弹,日线继续高位震荡,今日黄金走势分析,金价,黄金,宋奕洋
1、俚人文化是指中国古代民族俚人的民族文化。2、俚人是东汉以来生活在广东、广西和越南北部的一个民族,宋代以后逐渐融入其他
中钢网其他新闻资讯频道提供钢材行业其他新闻资讯,中钢网-免保证金、免手续费、零风险、零成本钢材现货交易平台,买卖钢材,就上中钢网。
——缅怀革命先烈追忆峥嵘岁月向革命烈士纪念碑行鞠躬礼泉州网3月29日讯(记者王丽虹通讯员钟建文文 图)青山铸忠魂,鲜花祭英烈。清明节...
1、普拉多V6蓝牙鼠标是一款鼠标。2、适用类型为笔记本便携。3、个性时尚。文章到此就分享结束,希望对大家有所帮助。
1、已经上市的弗乐卡集成水槽有两代产品,第一代产品为功能集成水槽,主要集合传统水槽、冷热水系统、净水系统、垃圾处理器、刀
教师节礼物棒棒糖套,每当教师节来临的时候,孩子总是想送一个小礼物给老师,但是怕孩子有什么用心,也不会有什么新意,但是,大家有没有推荐
Copyright © 2015-2022 纵横服装网版权所有 备案号:浙ICP备2022016517号-12 联系邮箱:51 46 76 11 3 @qq.com