数据库_数据库 知识 概念 - CSDN
数据库 订阅
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。 [1] 展开全文
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。 [1]
信息
外文名
database
概    念
电子化的文件柜
作    用
对数据进行存储以及删除等操作
中文名
数据库
功    能
组织、存储和管理数据
类别分类
关系数据库、非关系数据库
数据库简介
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。 [2]  数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。在数据库的发展历史上,数据库先后经历了层次数据库、网状数据库和关系数据库等各个阶段的发展,数据库技术在各个方面的快速的发展。特别是关系型数据库已经成为目前数据库产品中最重要的一员,80年代以来, 几乎所有的数据库厂商新出的数据库产品都支持关系型数据库,即使一些非关系数据库产品也几乎都有支持关系数据库的接口。这主要是传统的关系型数据库可以比较好的解决管理和存储关系型数据的问题。随着云计算的发展和大数据时代的到来,关系型数据库越来越无法满足需要,这主要是由于越来越多的半关系型和非关系型数据需要用数据库进行存储管理,以此同时,分布式技术等新技术的出现也对数据库的技术提出了新的要求,于是越来越多的非关系型数据库就开始出现,这类数据库与传统的关系型数据库在设计和数据结构有了很大的不同, 它们更强调数据库数据的高并发读写和存储大数据,这类数据库一般被称为NoSQL(Not only SQL)数据库。 而传统的关系型数据库在一些传统领域依然保持了强大的生命力。 [3] 
收起全文
精华内容
参与话题
  • MySQL数据库从入门到实战课

    万人学习 2020-10-16 10:18:36
    使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python ...
  • 数据库概论总结

    千次阅读 2018-07-11 18:05:12
    数据库 绪论 数据管理的三个阶段 人工管理阶段 文件系统阶段 数据库系统阶段 基本术语 数据(Data) 计算机用来描述事物的记录(文字.图形.图像.声音) 数据的形式本身并不能完全表达其内容,需要...

    数据库

    绪论

    数据管理的三个阶段

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

    基本术语

    • 数据(Data)
      • 计算机用来描述事物的记录(文字.图形.图像.声音)
      • 数据的形式本身并不能完全表达其内容,需要经过语义解释。数据与其语义是不可分的
    • 数据库(Database,简称DB)
      • 数据库是长期存储在计算机内有结构的大量的共享的数据集合。
    • 数据库管理系统(DBMS)
      • 数据库管理系统是位于用户与操作系统之间的一层数据管理软件。
      • 数据库在建立、运用和维护时由数据库管理系统统一管理、统一控制。
      • 数据库系统(DBS)
        • 数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
    • 数据冗余度:
      • 指同一数据重复存储时的重复程度。
    • 数据的安全性(Security)
      • 数据的安全性是指保护数据,防止不合法使用数据造成数据的泄密和破坏,使每个用户只能按规定,对某些数据以某些方式进行访问和处理。
    • 数据的完整性(Integrity)
      • 数据的完整性指数据的正确性、有效性和相容性。即将数据控制在有效的范围内,或要求数据之间满足一定的关系。
    • 并发(Concurrency)控制
      • 当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰而得到错误的结果并使得数据库的完整性遭到破坏,因此必须对多用户的并发操作加以控制和协调。
    • 数据库恢复(Recovery)
      • 计算机系统的硬件故障、软件故障、操作员的失误以及故意的破坏也会影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失。DBMS必须具有将数据库从错误状态恢复到某一已知的正确状态(亦称为完整状态或一致状态)的功能。

    数据库的三要素

    • 数据(描述事物的符号记录,数据库里面存储的内容)
    • 存储器(外存,一般是硬盘,数据库的载体)
    • 数据库管理系统(DBMS,数据库的管理软件)

    数据模型

    • 模型
      • 是现实世界特征的模拟和抽象
    • 数据模型
      • 也是一种模型,它是现实世界数据特征的抽象,表示实体以及实体间的联系
      • 一个用于描述数据、数据间关系、数据语义和数据约束的概念工具的集合
    • 两级模型的抽象
      • 一是概念模型
        • (也称信息模型,用于信息世界的建模),它是按用户的观点来对数据和信息建模,主要用于数据库设计。这类模型强调其语义表达能力,要能够较方便、直接地表达应用中的各种语义知识,这类模型应为概念简单、清晰、易于用户理解,是用户和数据库设计人员之间进行交流的语言。
      • 二是数据模型
        • (如层次、网状、关系模型,用于机器世界),它是按计算机系统的观点对数据建模,主要用于DBMS的实现。这类模型通常需要有严格的形式化定义,而且常常会加上一些限制或规定,以便于机器上的实现。还通常有一组严格定义了语法和语义的语言,人们可以使用它来定义、操纵数据库中的数据。
    • 数据模型的三要素
      • (1) 数据结构
        • 数据结构是所研究的对象类型(Object Type)的集合。这些对象是数据库的组成部分。一般可分为两类:一类是与数据类型、内容、性质有关的对象,如网状模型中的数据项、记录,关系模型中的属性、关系等;一类是与数据之间联系有关的对象,如网状模型中的系型(Set Type)等。
      • (2) 数据操作
        • 数据操作是指对数据库中各种对象(型)的实例(值)允许执行的操作的集合。数据库主要有检索和更新(插入、删除、修改)两大类操作。
        • 数据结构是对系统静态特性的描述,数据操作是对系统动态特性的描述。
      • (3) 数据的约束条件
        • 数据的约束条件是完整性规则的集合。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据状态以及状态的变化,以保证数据的正确、有效、相容。
    • 概念模型
      • 实体(Entity)
        • 客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系,如学生、部门、课程、银行帐户、选课、订货、演出、比赛等。
      • 属性(Attribute)
        • 实体所具有的某一特性称为属性。如学生实体可以由学号、姓名、性别、出生年月、系、入学时间等属性组成
      • 码(关键字,Key)
        • 唯一标识实体的(最小的)属性集称为码。例如学号学生实体的码
      • 域(Domain)
        • 属性的取值范围称为该属性的域。例如学号的域为8位整数,姓名的域为字符串集合,,性别的域为(男,女)。
      • 实体型(Entity Type)
        • 具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻划同类实体,称为实体型。例如:学生(学号,姓名,性别,出生年月,系,入学时间)
      • 实体集(Entity Set)
        • 同型实体的集合称为实体集。例如,全体学生就是一个实体集。
      • 联系(Relationship)
        • 在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反映为实体(型)内部的联系和实体(型)之间的联系。〖组成实体的各属性之间以及不同实体集之间的联系〗

    联系的种类

    • 1对1联系
      • 定义:若对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
    • 1对多联系
      • 定义:若对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B具有一对多联系,记为1:n
    • 多对多联系
      • 定义:若对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n

    概念模型的表示方法

    • E-R图
      • 使用长方形来表示实体型,框内写上实体名
      • 椭圆型表示实体的属性,并用无向边把实体和属性连接起来
      • 用菱形表示实体间的联系,菱形框内写上联系名,用无向边把菱形分别与有关实体相连接,在无向边旁标上联系的类型,若实体之间联系也具有属性,则把属性和菱形也用无向边连接上
      • *

    基本数据模型

    • 层次模型(Hierarchical Model)
      • 最早使用的一种模型
      • 数据结构是一棵有向树
      • 特点
        • (1) 有且仅有一个结点无双亲,该结点称为根结点。
        • (2) 其他结点有且只有一个双亲
    • 网状模型(Network Model)
      • 数据结构是一个有向图
      • 特点
        • (1)有一个以上的结点没有双亲
        • (2)结点可以有多于一个的双亲
      • 能表示实体之间的多种复杂联系
    • 关系模型(Relational Model)
      • 关系模型是用二维表格结构来表示实体及实体之间的联系的模型
      • 数据结构是一个“二维表框架”组成的集合
      • 关系模型概念简单,清晰,用户易懂易用,有严格的数学基础
      • 大多数数据库系统都是关系型的
      • 主要术语
        • 关系:一个关系对应于我们平常讲的一张表
        • 元组:表中的一行称为一个元组
        • 属性:表中的一列称为属性,每列的名称为属性名
        • 主码:表中的某个属性组,它们的值唯一的标识一个元组
        • 域:属性的取值范围
        • 分量:元组中的一个属性值
        • 关系模式:对关系的描述,用关系名(属性名1,属性名2,…,属性名n)来表示
      • 特点
          1. 概念单一:
            • 实体或实体之间的联系都用关系表示
            • 用户的观点里,数据的逻辑结构就是表
          1. 关系必须是规范化的关系
            • 指在关系模型中,每一个关系模式要满足一定的要求或者称为规范条件
            • 其最基本的要求是每一个分量是一个不可分的数据项,也就是说,不允许表中还有表。
          1. 用户对数据的检索操作不过是从原来的表中得到一张新的表
            • 在用户眼中,无论是原始数据还是结果数据,都是同一种数据结构——二维表。
            • 数据操作是集合操作,即操作对象和操作结果都是若干元组的集合,而不象非关系模型中那样单记录的操作方式。
            • 把存取路径向用户隐藏起来,提高了数据的独立性。

    数据库系统的体系结构

    • 三层模式:外模式、模式、内模式
      • 外模式
        • 又称为用户模式,是数据库用户和数据库系统的接口,是数据库用户的数据视图,是数据库用户可以看见和使用的局部数据的逻辑结构和特征的描述
        • 一个数据库通常都有多个外模式。一个应用程序只能使用一个外模式,但同一外模式可为多个应用程序所用
      • 模式
        • 可细分为概念模式和逻辑模式,是所有数据库用户的公共数据视图,是数据库中全部数据的逻辑结构和特征的描述。
        • •一个数据库只有一个模式。模式不但要描述数据的逻辑结构,还要描述数据之间的联系、数据的完整性、安全性要求。
      • 内模式
        • 又称为存储模式,是数据库物理结构和存储方式的描述,是数据在数据库内部的表示方式。
        • •一个数据库只有一个内模式。内模式并不涉及物理记录,也不涉及硬件设备。
    • •二层映象功能:外模式/模式映象和模式/内模式映象
      • 三层模式关系
        • 数据库模式是数据库的核心和关键,外模式通常是模式的子集。数据按外模式的描述提供给用户,按内模式的描述存储在硬盘上,而模式介于外、内模式之间,既不涉及外部的访问,也不涉及内部的存储,从而起到隔离作用,有利于保持数据的独立性,内模式依赖于全局逻辑结构,但可以独立于具体的存储设备
      • 映象
        • 是一种对应规则,说明映象双方如何进行转换。
      • 外模式/模式映象
        • 作用:把描述局部逻辑结构的外模式与描述全局逻辑结构的模式联系趣来
        • 当模式改变时,只要对外模式/模式映象做相应的改变,使外模式保持不变,则以外模式为依据的应用程序不受影响,从而保证了数据与程序之间的逻辑独立性,也就是数据的逻辑独立性
      • 模式/内模式映象
        • 作用:把描述全局逻辑结构的模式与描述物理结构的内模式联系起来
        • 当内模式改变时,比如存储设备或存储方式有所改变,只要模式/内模式映象做相应的改变,使模式保持不变,则应用程序就不受影响,从而保证了数据与程序之的物理独立性。

    关系模型

    关系模型组成的三要素

    • 关系数据结构
      • 基本概念
        • 关系
        • 关系模式
          • 什么是关系模式
            • 关系模式(Relation Schema)是型
          • 关系是值
            • 关系模式是对关系的描述
        • 关系数据库
    • 关系操作集合
    • 关系完整性约束
      • 关系模型的完整性规则是对关系的某种约束条件
      • 实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系系统自动支持。

    基本关系的六大性质

    • ① 列是同质的(Homogeneous)
      • 每一列中的分量是同一类型的数据,来自同一个域
    • ② 不同的列可出自同一个域
      • 其中的每一列称为一个属性
      • 不同的属性要给予不同的属性名
    • ③ 列的顺序无所谓
      • 列的次序可以任意交换
      • 遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列。但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了属性顺序
    • ④ 任意两个元组的候选码不能完全相同
      • 候选码是可以惟一标识一个元组的属性或属性组。若一个关系中的候选码有多个,则选择一个作为主码
    • ⑤ 行的顺序无所谓

      • 行的次序可以任意交换
      • 遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行。但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了元组的顺序
    • ⑥ 分量必须取原子值

      • 每一个分量都必须是不可分的数据项。

    关系模型中的三类完整性约束

    • 实体完整性
    • 参照完整性
      • 外码(Foreign Key)
    • 用户定义的完整性

    关系代数

    概述

    • 关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。
    • 关系代数的运算对象是关系,运算结果亦为关系。

    关系代数的运算

    • 普通的集合运算
      • 并、交、差
    • 删除部分关系的运算
      • 选择、投影
    • 合并两个关系元组的运算
      • 连接、积
    • 改名运算

    关系代数

    • 并Union (∪)
      • R和S的并,R∪S,是在R或S或两者中的元素的集合
      • 一个元素在并集中只出现一次
      • R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
    • 交Intersect (∩)
      • R和S的交,R∩S,是在R和S中都存在的元素的集合
      • 一个元素在交集中只出现一次
      • R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
    • 差Minus (-)
      • R和S的差,R-S,是在R中而不在S中的元素的集合
      • R和S必须同类型(属性集相同、次序相同,但属性名可以不同)
    • 投影Projection(π)
      • 从关系R中选择若干属性组成新的关系
      • πA1,A2,…,An(R),表示从R中选择属性集A1,A2,…,An组成新的关系
      • 列的运算
      • 投影运算的结果中,也要去除可能的重复元组
    • 广义笛卡儿积(×)
      • 关系R、S的广义笛卡儿积是两个关系的元组对的集合所组成的新关系
      • R×S:
        • 属性是R和S的组合(有重复)
        • 元组是R和S所有元组的可能组合
        • 是R、S的无条件连接,使任意两个关系的信息能组合在一起
    • 选择Selection(σ)
      • 从关系R中选择符合条件的元组构成新的关系
      • σC(R),表示从R中选择满足条件(使逻辑表达式C为真)的元组
      • 行的运算
    • 条件连接(θ)
      • 从R×S的结果集中,选取在指定的属性集上满足AθB条件的元组,组成新的关系
      • θ是一个关于属性集的比较运算符
      • θ为“=”的连接运算称为等值连接。
    • 自然连接
      • 从R×S的结果集中,选取在某些公共属性上具有相同值的元组,组成新的关系
      • R、S的公共属性
        • 属性集的交集(名称及类型相同)
      • 公共属性在结果中只出现一次
      • 等值连接
    • 关系代数—除( ÷ )
      • 给定关系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]。
      • 例子

    数据库语言SQL

    SQL的发展

    • 1974年,由Boyce和Chamberlin提出
    • 1975~1979,IBM San Jose Research Lab的关系数据库管理系统原型System R实施了这种语言
    • SQL-86是第一个SQL标准
    • SQL-89、SQL-92(SQL2)、SQL-99(SQL3)

    非过程化语言

    • SQL语言进行数据库操作时,只需要提出“做什么”,不需要指明“怎么做”。“怎么做”是由DBMS来完成

    SQL的形式

    • 交互式SQL
      • 一般DBMS都提供联机交互工具
      • 用户可直接键入SQL命令对数据库进行操作
      • 由DBMS来进行解释
    • 嵌入式SQL
      • 能将SQL语句嵌入到高级语言(宿主语言)
      • 使应用程序充分利用SQL访问数据库的能力、宿主语言的过程处理能力
      • 一般需要预编译,将嵌入的SQL语句转化为宿主语言编译器能处理的语句

    SQL语言主要组成部分

    • 数据定义语言(DDL,Data Definition Language)
      • 数据定义语言是指用来定义和管理数据库以及数据库中的各种对象的语句,这些语句包括CREATE、ALTER和DROP等语句。在SQL Server中,数据库对象包括表、视图、触发器、存储过程、规则、缺省、用户自定义的数据类型等。这些对象的创建、修改和删除等都可以通过使用CREATE、ALTER、DROP等语句来完成。
      • 常见的数据类型
        • 字符型:
          • 定长字符型 char(n) 由于是定长,所以速度快
          • 变长字符型 varchar(n)
        • 数值型:
          • 整型 int(或integer) -231~+231
          • 短整型 smallint -215~+215的
          • 浮点型 real、float、double
          • 数值型 numeric (p [,d])
        • 日期/时间型:
          • DateTime
        • 文本和图像型
          • Text:存放大量文本数据。在SQLServer中,Text对象实际为一指针
          • Image:存放图形数据
    • 数据操纵语言(DML,Data Manipulation Language)
      • 数据操纵语言是指用来查询、添加、修改和删除数据库中数据的语句,这些语句包括SELECT、INSERT、UPDATE、DELETE等。在默认情况下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成员才有权利执行数据操纵语言。
    • 数据控制语言(DCL,Data Control Language)
      • 数据控制语言(DCL)是用来设置或者更改数据库用户或角色权限的语句,这些语句包括GRANT、REVOKE 、DENY等语句,在默认状态下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成员才有权利执行数据控制语言。

    SQL语句

    • 建立表结构 Create
      • 定义基本表的语句格式:
      • CREATE TABLE <表名>(<列定义>[{,<列定义>,<表约束>}])
      • 表名:
      • 列定义:列名、列数据类型、长度、是否允许空值等。
      • 定义完整性约束:列约束和表约束
      • [CONSTRAINT<约束名>] <约束定义>
    • 删除表结构 Drop
      • 用SQL删除关系(表)
        • 将整个关系模式(表结构)彻底删除
        • 表中的数据也将被删除
    • 修改表结构 Alter
      • 增加表中的属性
        • 向已经存在的表中添加属性
        • allow null (新添加的属性要允许为空)
        • 已有的元组中该属性的值被置为Null
      • 修改表中的某属性(某列)
        • 修改属性类型或精度
      • 删除表中的某属性(某列)
        • 去除属性及相应的数据
    • 向表中添加数据(Insert)
      • 数据添加
        • 用SQL的插入语句,向数据库表中添加数据
        • 按关系模式的属性顺序
        • 按指定的属性顺序,也可以只添加部分属性(非Null属性为必需)
    • 数据删除(Delete)
      • 只能对整个元组操作,不能只删除某些属性上的值
      • 只能对一个关系起作用,若要从多个关系中删除元组,则必须对每个关系分别执行删除命令
      • 删除单个元组
      • 删除多个元组
      • 删除整个关系中的所有数据
    • 数据更新(Update)
      • 改变符合条件的某个(某些)元组的属性值
    • 数据查询(Select)
      • 数据查询是数据库应用的核心功能
      • Select子句——重复元组
        • SQL具有包的特性
        • Select 子句的缺省情况是保留重复元组( ALL ),可用 Distinct 去除重复元组
        • 去除重复元组:费时
        • 需要临时表的支持
      • Select子句—— *与属性列表
        • 星号 * 表示所有属性
          • 星号 * :按关系模式中属性的顺序排列
          • 显式列出属性名:按用户顺序排列
      • Select子句——更名
        • 为结果集中的某个属性改名
        • 使结果集更具可读性
      • Where 子句
        • 查询满足指定条件的元组可以通过Where子句来实现
        • 使where子句中的逻辑表达式返回True值的元组,是符合要求的元组,将被选择出来
        • Where 子句——运算符
          • 比较:<、<=、>、>=、=、<> 等
          • 确定范围:
            • Between A and B、Not Between A and B
          • 确定集合:IN、NOT IN
          • 字符匹配:LIKE,NOT LIKE
          • 空值:IS NULL、IS NOT NULL
          • 多重条件:AND、OR、NOT
        • Where 子句——Like
          • 字符匹配:Like、Not Like
          • 通配符
          • % —— 匹配任意字符串
          • _ —— 匹配任意一个字符
          • 大小写敏感
        • Where 子句——转义符 escape
      • From 子句
        • 列出将被查询的关系(表)
        • From 子句——元组变量
          • 为 From 子句中的关系定义元组变量
          • 方便关系名的引用
        • 连接子句
          • 内连接
            • 内连接是指包括符合条件的每个表的记录,也称之为全记录操作。
          • 外连接
            • 外连接是指把两个表分为左右两个表。右外连接是指连接满足条件右侧表的全部记录。左外连接是指连接满足条件左侧表的全部记录。全外连接是指连接满足条件表的全部记录。
            • 左外连接
            • 右外连接
            • 全外连接
      • Order By子句
        • 指定结果集中元组的排列次序
        • 耗时
        • ASC升序(缺省)、DESC降序
      • 子查询(Subquery )
        • 子查询是嵌套在另一查询中的 Select-From-Where 表达式(Where/Having)
        • SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件
        • 可以用多个简单查询来构成复杂查询,以增强SQL的查询能力
        • 子查询中不使用 Order By 子句,Order By子句只能对最终查询结果进行排序
        • 子查询——单值比较
          • 返回单值的子查询,只返回一行一列
          • 父查询与单值子查询之间用比较运算符进行连接
            • 运算符:>、>=、=、<=、<、 <>
        • 子查询——多值
          • 子查询返回多行一列
          • 运算符:In、All、Some(或Any)、Exists
            • 子查询——多值成员In
              • 若值与子查询返回集中的某一个相等,则返回true
                • IN 被用来测试多值中的成员
            • 子查询——多值比较 ALL
              • 父查询与多值子查询之间的比较用All来连接
              • 值s比子查询返回集R中的每个都大时,s>All R 为True
              • All表示所有
              • > all、< all、<=all、>=all、<> all
              • <> all 等价于 not in
            • 子查询——多值比较Some/Any
              • 父查询与多值子查询之间的比较需用Some/Any来连接
              • 值s比子查询返回集R中的某一个都大时返回 Ture
                • s > Some R为True 或
                • s > Any R为True
              • Some(早期用Any)表示某一个(任意一个)
              • > some、< some、<=some、>=some、<> some
              • = some 等价于 in、<> some 不等价于 not in
        • 子查询——存在判断Exists
          • Exists + 子查询用来判断该子查询是否返回元组
          • 当子查询的结果集非空时,Exists为True
          • 当子查询的结果集为空时,Exists为False
          • 不关心子查询的具体内容,因此用 Select *
          • 具有外部引用的子查询,称为相关子查询(Correlated Queries)
          • 外层元组的属性作为内层子查询的条件
      • 聚合函数
        • 把一列中的值进行聚合运算,返回单值的函数
        • 五个预定义的聚合函数
          • 平均值:Avg( )
          • 总和: Sum( )
          • 最小值:Min( )
          • 最大值:Max( )
          • 计数: Count( ) 返回所选列中不为NULL的数
        • Group By
          • 将查询结果集按某一列或多列的值分组,值相等的为一组,一个分组以一个元组的形式出现
          • 只有出现在Group By子句中的属性,才可出现在Select子句中
        • Having
          • 针对聚合函数的结果值进行筛选(选择),它作用于分组计算结果集
          • 跟在Group By子句的后面。
        • Having 与 Where的区别
          • Where 决定哪些元组被选择参加运算,作用于关系中的元组
          • Having 决定哪些分组符合要求,作用于分组
          • 聚合函数的条件关系必须用Having,Where中不应出现聚合函数
        • 聚合函数对Null的处理
          • Count:不计
          • Sum:不将其计入
          • Avg:具有 Null 的元组不参与
          • Max / Min:不参与

    视 图 (VIEW)

    • 视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。和真实的表一样,视图也包括几个被定义的数据列和多个数据行,但从本质上讲,这些数据列和数据行来源于其所引用的表。因此,视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
    • 创建视图
    • 视图的更新

    索引

    • 数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速查找所需信息,无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单
    • 索引的作用
      • 通过创建唯一索引,可以保证数据记录的唯一性。
      • 可以大大加快数据检索速度。
      • 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
      • 在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组和排序的时间。
      • 使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能
    • 聚集索引与非聚集索引
      • 聚集索引对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的,它的叶节点中存储的是实际的数据
      • 非聚集索引具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器
    • 创建索引

    约束

    • 主键约束(primary key constraint)
    • 唯一性约束(unique constraint)
    • 检查约束(check constraint)
    • 缺省约束(default constraint)
    • 外部键约束(foreign key constraint)

    SQL SERVER权限管理

    • SQL Server权限管理策略
      • 安全帐户认证
        • 安全帐户认证是用来确认登录SQL Server的用户的登录帐号和密码的正确性,由此来验证其是否具有连接SQL Server的权限。 SQL Server 2000提供了两种确认用户的认证模式:
          • (一)Windows NT认证模式。
            • SQL Server数据库系统通常运行在Windows NT服务器平台上,而NT作为网络操作系统,本身就具备管理登录、验证用户合法性的能力,因此Windows NT认证模式正是利用了这一用户安全性和帐号管理的机制,允许SQL Server也可以使用NT的用户名和口令。在这种模式下,用户只需要通过Windows NT的认证,就可以连接到SQL Server,而SQL Server本身也就不需要管理一套登录数据。
          • (二)混合认证模式。
            • 混合认证模式允许用户使用Windows NT安全性或SQL Server安全性连接到SQL Server,这就意味着用户可以使用他的帐号登录到Windows NT,或者使用他的登录名登录到SQL Server系统。NT的用户既可以使用NT认证,也可以使用SQL Server认证
      • 访问许可确认
        • 但是通过认证阶段并不代表用户能够访问SQL Server中的数据,同时他还必须通过许可确认。用户只有在具有访问数据库的权限之后,才能够对服务器上的数据库进行权限许可下的各种操作,这种用户访问数据库权限的设置是通过用户帐号来实现的。
    • 用户权限管理
      • 服务器登录帐号和用户帐号管理
        • 1.利用企业管理器创建、管理SQL Server登录帐号
          • (1)打开企业管理器,单击需要登录的服务器左边的“+”号,然后展开安全性文件夹。
          • (2)用右键单击登录(login)图标,从快捷菜单中选择新建登录(new login)选项,则出现SQL Server登录属性—新建登录对话框,如图6-2所示。
          • (3)在名称编辑框中输入登录名,在身份验证选项栏中选择新建的用户帐号是Windows NT认证模式,还是SQL Server认证模式。
          • (4)选择服务器角色页框。在服务器角色列表框中,列出了系统的固定服务器角色。
          • (5)选择用户映射页框。上面的列表框列出了该帐号可以访问的数据库,单击数据库左边的复选框,表示该用户可以访问相应的数据库以及该帐号在数据库中的用户名。
          • (6)设置完成后,单击“确定”按钮即可完成登录帐号的创建。
        • 使用SQL 语句创建登录帐号
        • 2.用户帐号管理
          • 在数据库中,一个用户或工作组取得合法的登录帐号,只表明该帐号通过了Windows NT认证或者SQL Server认证,但不能表明其可以对数据库数据和数据库对象进行某种或者某些操作,只有当他同时拥有了用户权限后,才能够访问数据库。
          • 利用企业管理器可以授予SQL Server登录访问数据库的许可权限。使用它可创建一个新数据库用户帐号
      • 许可(权限)管理
        • 许可用来指定授权用户可以使用的数据库对象和这些授权用户可以对这些数据库对象执行的操作。用户在登录到SQL Server之后,其用户帐号所归属的NT组或角色所被赋予的许可(权限)决定了该用户能够对哪些数据库对象执行哪种操作以及能够访问、修改哪些数据。在每个数据库中用户的许可独立于用户帐号和用户在数据库中的角色,每个数据库都有自己独立的许可系统,在SQL Server中包括三种类型的许可:即对象许可、语句许可和预定义许可。
          • 三种许可类型
            • 1、对象许可
              • 表示对特定的数据库对象,即表、视图、字段和存储过程的操作许可,它决定了能对表、视图等数据库对象执行哪些操作。
            • 2、语句许可
              • 表示对数据库的操作许可,也就是说,创建数据库或者创建数据库中的其它内容所需要的许可类型称为语句许可。
            • 3、预定义许可
              • 是指系统安装以后有些用户和角色不必授权就有的许可。
      • 角色管理
        • 角色是SQL Server 7.0版本引进的新概念,它代替了以前版本中组的概念。利用角色,SQL Server管理者可以将某些用户设置为某一角色,这样只对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量。SQL Server提供了用户通常管理工作的预定义服务器角色和数据库角色。
          • 1、服务器角色
            • 服务器角色是指根据SQL Server的管理任务,以及这些任务相对的重要性等级来把具有SQL Server管理职能的用户划分为不同的用户组,每一组所具有的管理SQL Server的权限都是SQL Server内置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。
            • 几种常用的固定服务器角色
              • 系统管理员:拥有SQL Server所有的权限许可。
              • 服务器管理员:管理SQL Server服务器端的设置。
              • 磁盘管理员:管理磁盘文件。
              • 进程管理员:管理SQL Server系统进程。
              • 安全管理员:管理和审核SQL Server系统登录。
              • 安装管理员:增加、删除连接服务器,建立数据库复制以及管理扩展存储过程。
              • 数据库创建者:创建数据库,并对数据库进行修改。
          • 2、数据库角色
            • 数据库角色是为某一用户或某一组用户授予不同级别的管理或访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色。SQL Server提供了两种类型的数据库角色:即固定的数据库角色和用户自定义的数据库角色。
            • (1)固定的数据库角色
              • public:维护全部默认许可。
              • db_owner:数据库的所有者,可以对所拥有的数据库执行任何操作。
              • db_accessadmin:可以增加或者删除数据库用户、工作组和角色。
              • db_addladmin:可以增加、删除和修改数据库中的任何对象。
              • db_securityadmin:执行语句许可和对象许可。
              • db_backupoperator:可以备份和恢复数据库。
              • db_datareader:能且仅能对数据库中的任何表执行select操作,从而读取所有表的信息。
              • db_datawriter:能够增加、修改和删除表中的数据,但不能进行select操作。
              • db_denydatareader:不能读取数据库中任何表中的数据。
              • db_denydatawriter:不能对数据库中的任何表执行增加、修改和删除数据操作。
            • (2)用户自定义角色
              • 创建用户定义的数据库角色就是创建一组用户,这些用户具有相同的一组许可。如果一组用户需要执行在SQL Server中指定的一组操作并且不存在对应的Windows NT组,或者没有管理Windows NT用户帐号的许可,就可以在数据库中建立一个用户自定义的数据库角色。用户自定义的数据库角色有两种类型:即标准角色和应用程序角色。
    • Transaction_SQL 语句
      • 赋权语句——Grant
      • 收回权限——Revoke
      • 收回权限——Deny

    查询优化

    概述

    • 关系系统和关系模型是两个密切相关而有不同的概念。支持关系模型的数据库管理系统称为关系系统。但是关系模型中并非每一部分都是同等重要的,所以我们不苛求完全支持关系模型的系统才能称为关系系统。因此,我们给出一个关系系统的最小要求以及分类的定义。
    • 关系系统的定义
      • 1.支持关系数据库(关系数据结构)
        • 从用户观点看,数据库由表构成,并且只有表这一种结构。
      • 2.支持选择、投影和(自然)连接运算,对这些运算不必要求定义任何物理存取路径
        • 当然并不要求关系系统的选择、投影、连接运算和关系代数的相应运算完全一样,而只要求有等价的这三种运算功能就行。

    查询优化

    • 查询优化:对于给定的查询选择代价最小的操作序列,使查询过程既省时间,具有较高的效率,这就是所谓的查询优化。对于关系数据库系统,用户只要提出“做什么”,而由系统解决“怎么做”的问题。具体来说,是数据库管理系统中的查询处理程序自动实现查询优化。
    • 关系查询优化是影响RDBMS性能的关键因素。关系系统的查询优化既是RDBMS实现的关键技术又是关系系统的优点所在。
    • 查询优化的优点不仅在于用户不必考虑如何最好地表达查询以获得较好的效率,而且在于系统可以比用户程序的“优化”做得更好。
    • 查询优化的一般准则
      • 1.选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条。它常常可使执行时节约几个数量级,因为选择运算一般使计算的中间结果大大变小
      • 2.在执行连接前对关系适当地预处理。预处理方法主要有两种,在连接属性上建立索引和对关系排序 。
      • 3.把投影运算和选择运算同时进行。如有若干投影和选择运算,并且它们都对同一个关系操作,则可以在扫描此关系的同时完成所有的这些运算以避免重复扫描关系。
      • 4.把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关系
      • 5.杷某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别是等值连接运算要比同样关系上的笛卡尔积省很多时间
      • 6.找出公共子表达式。

    关系数据库设计理论

    设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题)

    数据库逻辑设计主要解决的问题

    • 关系数据库应该组织成几个关系模式
    • 关系模式中包括哪些属性

    “不好”的数据库设计

    • 举例:为学校设计一个关系数据库
    • 关系模式: UN(Sno,Cno,G,Sdept,MN)
      • Sno:描述学生
      • Sdept:描述系名
      • MN:描述系主任
      • Cno:描述课程
      • G:描述学习成绩
      • 根据对现实世界的分析,可得出:Sno,Cno是码
      • 按照关系模式UN装入部分数据

      • 对数据库操作时,会出现以下问题
        1. 数据冗余(系主任名的存储次数)
          • 数据重复存储:浪费存储空间,数据库维护困难(更新异常)
        1. 插入异常(一个系刚成立)
          • 主码为空的记录不能存在与数据库,导致不能进行插入操作
        1. 删除异常(一个系的学生全部毕业)
          • 删除操作后,一些相关信息无法保存在数据库中
    • 要消除以上的“弊病”,把上面的关系数据库模式分解为三个关系模式
      • S(Sno,Sdept)
      • SG(Sno,Cno,G)
      • Dept(Sdept,MN)

    函数依赖

    • 类似于变量之间的单值函数关系
    • Y=F(X),其中自变量X的值,决定一个唯一的函数值Y
    • 在一个关系模式里的属性,由于它在不同元组里属性值可能不同,由此可以把关系中的属性看作变量
    • 一个属性与另一个属性在取值上可能存在制约关系
    • 函数依赖就是属性间的逻辑依赖关系
    • 定义1 设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集.对于R(U)的任何一个可能的关系r,如果r中不存在两个元组,它们在X上的属性值相同,而在Y上的属性值不同,则称X函数决定Y,或Y函数依赖于X,记作:X Y.
    • X通常称为“决定因素”
    • 几点说明
        1. 函数依赖是语义范畴的概念.它反映了一种语义完整性约束,只能根据语义来确定一个函数依赖.
        1. 函数依赖是指关系R模式的所有关系元组均应满足的约束条件,而不是关系模式中的某个或某些元组满足的约束条件
        1. 函数依赖与属性间的联系类型有关
          • (1)若属性X和Y之间有“一对一”的联系,
          • (2)若属性X和Y之间有“多对一”的联系,
          • (3)若属性X和Y之间有“多对多”的联系,
        1. 如果X Y,并且Y不是X的子集,则称X Y是非平凡的函数依赖;如果Y是X的子集,则称X Y是平凡的函数依赖;

    完全函数依赖与部分函数依赖

    • 完全函数依赖
    • 部分函数依赖

    码的形式定义

    • 候选码的两个性质
        1. 标识的唯一性: 对于R(U)中的每一元组,K的值确定后,该元组就相应确定了.
        1. 无冗余性: K是属性组的情况下,K的任何一部分都不能唯一标识该元组(定义中的完全函数依赖的意义)

    规范化

    • 简介
      • 用几个简单的关系去取代原来结构复杂的关系的过程叫做关系规范化.
      • 规范化理论是研究如何把一个不好的关系模式转化为好的关系模式的理论
      • 规范化理论是E.E.Codd在1971年首先提出的
      • 规范化理论是数据库设计过程中的一个非常有用的辅助工具
    • 范式
      • 简介
        • 规范化理论是围绕着范式建立的.
        • 满足不同程度要求的约束集则称为不同的范式.
        • 如果一个关系满足某个指定的约束集,则称它属于某个特定的范式.
        • 较高层次的范式比较低层次的范式具有“更合乎要求的性质”
        • 一个低一级范式的关系模式,通过投影运算可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化.
        • 如果一个关系满足某个范式要求,则它也会满足较其级别低的所有范式的要求
      • 范式层次
      • 第一范式(1NF)
        • 定义5: 在关系模式R中的每一个具体关系r中,如果每个属性值都是不可再分的最小数据单位,则称R是第一范式的关系,记作R∈1NF.
        • 数据库理论研究的是规范化关系.
        • 1NF规范化: 把非规范化关系规范提高到1NF关系模式的集合.
      • 第二范式(2NF)
        • 定义6: 若关系模式R∈1NF,且每个非主属性都完全依赖于R的任意候选码,则关系模式R属于第二范式,记作R ∈2NF.
        • 2NF规范化是把1NF关系模式规范提高到变成2NF关系模式的集合.
        • 从1NF中消除非主属性对候选码的部分函数依赖,则获得2NF关系.
        • 举例:UN(Sno,Cno,G,SDN,MN)
      • 第三范式(3NF)
        • 定义7: 若关系模式R∈2NF,且每个非主属性都不传递依赖于R的任意候选码,则R∈3NF.
        • 从2NF关系中,消除非主属性对码的传递依赖函数而获得3NF关系
        • R∈3NF,则每个非主属性既不部分依赖,也不传递依赖于R的任何候选码.
        • 3NF的规范化
      • BCNF范式
        • 3NF的不完善性
          • 定义8: 若R∈1NF,且R中每个决定因素都是候选码,则R ∈BCNF.
          • 满足BCNF的关系将消除任何属性对候选码的部分依赖与传递依赖
          • 应用BCNF定义时,可直接判断1NF是否属于BCNF
          • BCNF规范化

    数据库设计

    概述

    • 数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库极其应用系统,有效存储数据,满足用户信息要求和处理要求。

    数据库设计的步骤

    • ⒈需求分析阶段
      • 收集和分析用户需求,结果得到数据字典描述的数据需求。
      • 常用的调查方法
        • ⑴跟班作业
        • ⑵开调查会
        • ⑶请专人介绍
        • ⑷询问对某些调查中的问题,可以找专人询问。
        • ⑸设计调查表请用户填写
        • ⑹查阅记录
    • ⒉概念结构设计阶段
      • 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,可以用E-R图表示。这是数据库设计的关键
    • ⒊逻辑结构设计阶段
      • 将概念结构转换为某个DBMS所支持的数据模型(例如关系模型),并对其进行优化(例如使用范式理论)
    • ⒋数据库物理设计阶段
      • 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
    • ⒌数据库实施阶段
      • 运用DBMS提供的数据语言(例如SQL)及其宿主语言(例如C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行
    • ⒍数据库运行和维护阶段
      • 数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评价、调整与修改

    数据字典

    • 对数据库设计来讲,数据字典是进行数据收集和数据分析所获得的主要成果。数据字典是各类数据描述的集合。
    • 数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程五个部分。
      • 数据项是不可再分的数据单位
      • 数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成
      • 数据流是数据结构在系统内传输的路径
      • 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一
      • 处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流}, 处理:{简要说明}}

    设计概念结构通常有四类方法

    • 自顶向下
      • 即首先定义全局概念结构的框架,然后逐步细化。
    • 自底向上
      • 即首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。这是最经常采用的策略。即自顶向下地进行需求分析,然后再自底向上地设计概念结构
    • 逐步扩张
      • 首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构
    • 混合策略
      • 即将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构

    E-R图

    • E-R方法是抽象和描述现实世界的有力工具
    • 要点
      • 使用长方形来表示实体型,框内写上实体名
      • 椭圆型表示实体的属性,并用无向边把实体和属性连接起来。
      • 用菱形表示实体间的联系,菱形框内写上联系名,用无向边把菱形分别与有关实体相连接,在无向边旁标上联系的类型,若实体之间联系也具有属性,则把属性和菱形也用无向边连接上。
    • E-R图之间的冲突主要有三类
      • 属性冲突
        • (1) 属性域冲突,即属性值的类型、取值范围或取值集合不同。
        • (2) 属性取值单位冲突
      • 命名冲突
        • (1) 同名异义
        • (2) 异名同义(一义多名)
      • 结构冲突
        • (1) 同一对象在不同应用中具有不同的抽象。例如“教材”在某一局部应用中被当作实体,而在另一局部应用中则被当作属性
        • (2) 同一实体在不同局部视图中所包含的属性不完全相同,或者属性的排列次序不完全相同
        • (3) 实体之间的联系在不同局部视图中呈现不同的类型。例如实体E1与E2在局部应用A中是多对多联系,而在局部应用B中是一对多联系;又如在局部应用X中E1与E2发生联系,而在局部应用Y中E1、E2、E3三者之间有联系

    逻辑结构设计阶段

    • ⒈一个实体型转换为一个关系模式。实体的属性就是关系的属性。实体的码就是关系的码。
    • ⒉一个m:n联系转换为一个关系模式。与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
    • ⒊一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
    • ⒋一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
    • ⒌三个或三个以上实体间的一个多元联系转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性。而关系的码为各实体码的组合。
      1. 具有相同码的关系模式可合并。

    数据模型的优化

    • 确定数据依赖
    • 对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。
    • 按照数据依赖的理论对关系模式逐一进行分析,考查是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。
    • 按照需求分析阶段得到的各种应用对数据处理的要求,分析对于这样的应用环境这些模式是否合适,确定是否要对它们进行合并或分解。
    • 对关系模式进行必要的分解。

    设计用户子模式

    • (1) 使用更符合用户习惯的别名
    • (2) 针对不同级别的用户定义不同的视图,以满足系统对安全性的要求
    • (3) 简化用户对系统的使用

    数据库物理设计

    • 确定数据库存储结构时要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的。
    • 为了提高系统性能,数据应该根据应用情况将易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放

    数据库恢复技术

    什么是事务

    • 事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
    • 事务和程序是两个概念
      • 在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
      • 一个应用程序通常包含多个事务
    • 事务是恢复和并发控制的基本单位

    事务结束

    • COMMIT
      • 事务正常结束
      • 提交事务的所有操作(读+更新)
      • 事务中所有对数据库的更新永久生效
    • ROLLBACK
      • 事务异常终止
        • 事务运行的过程中发生了故障,不能继续执行
        • 回滚事务的所有更新操作
        • 事务滚回到开始时的状态

    事务的特性(ACID特性)

    • 原子性(Atomicity)
      • 事务是数据库的逻辑工作单位
      • 事务中包括的诸操作要么都做,要么都不做
    • 一致性(Consistency)
      • 事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态
      • 一致性状态:
        • 数据库中只包含成功事务提交的结果
      • 不一致状态:
        • 数据库中包含失败事务的结果
    • 隔离性(Isolation)

      • 对并发执行而言一个事务的执行不能被其他事务干扰

      • 一个事务内部的操作及使用的数据对其他并发事务是隔离的

      • 并发执行的各个事务之间不能互相干扰
    • 持续性(Durability )
      • 持续性也称永久性(Permanence)
      • 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
      • 接下来的其他操作或故障不应该对其执行结果有任何影响。

    故障

    • 故障原因
      • 计算机硬件故障
      • 系统软件和应用软件的错误
      • 操作员的失误
      • 恶意的破坏
    • 故障的影响
      • 运行事务非正常中断
      • 破坏数据库
    • 故障的种类
      • 事务故障
      • 系统故障
      • 介质故障
      • 计算机病毒

    恢复操作的基本原理

    • 恢复操作的基本原理:冗余
    • 利用存储在系统其它地方的冗余数据来重建数据库中已被破坏或不正确的那部分数据

    恢复的实现技术

    • 数据转储(backup)
    • 登录日志文件(logging)

    并发控制

    多事务执行方式

    • (1)事务串行执行
      • 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
      • 不能充分利用系统资源,发挥数据库共享资源的特点
    • (2)交叉并发方式(interleaved concurrency)
      • 事务的并行执行是这些并行事务的并行操作轮流交叉运行
      • 是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率
    • (3)同时并发方式(simultaneous concurrency)
      • 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
      • 最理想的并发方式,但受制于硬件环境
      • 更复杂的并发方式机制

    事务并发执行带来的问题

    • 可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性
    • DBMS必须提供并发控制机制
    • 并发控制机制是衡量一个DBMS性能的重要标志之一

    并发控制机制的任务

    • 对并发操作进行正确调度
    • 保证事务的隔离性
    • 保证数据库的一致性

    并发操作带来的数据不一致性

    • 丢失修改(lost update)
      • 丢失修改是指事务1与事务2从数据库中读入同一数据并修改
      • 事务2的提交结果破坏了事务1提交的结果,导致事务1的修改被丢失。
    • 不可重复读(non-repeatable read)
      • 不可重复读是指事务1读取数据后,事务2执行更新操作,使事务1无法再现前一次读取结果。
    • 读“脏”数据(dirty read)
      • 事务1修改某一数据,并将其写回磁盘
      • 事务2读取同一数据后
      • 事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值
      • 事务2读到的数据就与数据库中的数据不一致,
      • 是不正确的数据,又称为“脏”数据。

    封锁

    • 什么是封锁
      • 封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
      • 加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
      • 封锁是实现并发控制的一个非常重要的技术
    • 基本封锁类型
      • 排它锁(eXclusive lock,简记为X锁)
        • 排它锁又称为写锁
        • 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
      • 共享锁(Share lock,简记为S锁)
        • 共享锁又称为读锁
        • 若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
    • 基本锁的相容矩阵
    • 封锁协议
      • 1级封锁协议
        • 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放
        • 1级封锁协议可防止丢失修改
        • 在1级封锁协议中,如果是读数据,不需要加锁的,所以它不能保证可重复读和不读“脏”数据。
          • 读“脏”数据
          • 不可重复读
      • 2级封锁协议
        • 1级封锁协议+事务T在读取数据R前必须先加S锁,读完后即可释放S锁
        • 2级封锁协议可以防止丢失修改和读“脏”数据。
        • 在2级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。
      • 3级封锁协议
        • 1级封锁协议 + 事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
        • 3级封锁协议可防止丢失修改、读脏数据和不可重复读。
      • 三级协议的主要区别

    完整性约束

    完整性约束的分类

    • 静态列级约束
        1. 对数据类型的约束,包括数据的类型、长度单位、精度等
        1. 对数据格式的约束
        1. 对取值范围或取值集合的约束
        1. 对空值的约束
        1. 其他约束
    • 静态元组约束
      • 一个元组是由若干个列值组成的,静态元组约束就是规定元组的各个列之间的约束关系
    • 静态关系约束
      • 在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。 (参照完整性-外码约束)
    • 动态列级约束
        1. 修改列定义时的约束
        1. 修改列值时的约束
    • 动态元组约束
      • 动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件
    • 动态关系约束
      • 动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件
    展开全文
  • 十分钟看懂数据库——数据库入门级语言总结

    万次阅读 多人点赞 2016-07-31 15:33:52
    从sql入门经典,到sql视频,再到自考的数据库系统原理,不知不觉中我们已经走进了数据库的世界,那么什么叫数据库,他又是干什么用的呢? 咱们先看一下百度给的解释啊。 数据库(Database)是按照数据结构来组织、...

    从sql入门经典,到sql视频,再到自考的数据库系统原理,不知不觉中我们已经走进了数据库的世界,那么什么叫数据库,他又是干什么用的呢?

    咱们先看一下百度给的解释啊。

    数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

    在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。

    他是一种特别强大的工具,实用性特别大,对于一些学校,公司的管理至关重要,既然他那么好,我们怎么去使用他啊。

    这里我们先介绍一些简单的数据库语言吧,这是基础,只有懂了这个才能看得懂数据库,更好地使用数据库。

    1、创建数据库

    CREATE DATABASE database-name 

    2、删除数据库

    drop database dbname

    3、:备份sql server

    --- 创建 备份数据的 device

    USE master

    EXEC sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'

    - -- 开始 备份

    BACKUP DATABASE pubs TO testBack 

    4、创建新表

    create table tabname(col1 type1 [not null] [primarykey],col2 type2 [not null],..)

    根据已有的表创建新表: 

    A:create table tab_new like tab_old (使用旧表创建新表)

    B:create table tab_new as select col1,col2… from tab_old definition only

    5:删除新表

    drop table tabname 

    6、增加一个列

    Alter table tabname add column col type

    注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

    7、添加主键: Alter table tabname add primarykey(col) 

    说明:删除主键: Alter table tabname dropprimary key(col) 

    8、创建索引:create [unique] index idxname ontabname(col….) 

    删除索引:drop index idxname

    注:索引是不可更改的,想更改必须删除重新建。

    9、创建视图:create view viewname as selectstatement 

    删除视图:drop view viewname

         10、几个简单的基本的sql语句

    选择:select * from table1 where 范围

    插入:insert intotable1(field1,field2) values(value1,value2)

    删除:delete from table1 where 范围

    更新:update table1 set field1=value1where 范围

    查找:select * from table1 wherefield1 like ’%value1%’ ---like的语法很精妙,查资料!

    排序:select * from table1 order byfield1,field2 [desc]

    总数:select count as totalcount fromtable1

    求和:select sum(field1) as sumvaluefrom table1

    平均:select avg(field1) as avgvaluefrom table1

    最大:select max(field1) as maxvaluefrom table1

    最小:select min(field1) as minvaluefrom table1

    11、说明:几个高级查询运算词

    A: UNION 运算符 

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 

    B: EXCEPT 运算符 

    EXCEPT运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

    C: INTERSECT 运算符

    INTERSECT运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 

    注:使用运算词的几个查询结果行必须是一致的。 

    12、说明:使用外连接 

    A、left (outer) join: 

    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 

    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFTOUT JOIN b ON a.a = b.c

    B:right (outer) join: 

    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 

    C:full/cross (outer) join: 

    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    13、分组:Group by:

    一张表,一旦分组 完成后,查询后只能得到组相关的信息。

    组相关的信息:(统计信息) count,sum,max,min,avg分组的标准)

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据

    在selecte统计函数中的字段,不能和普通的字段放在一起;

    14、对数据库进行操作:

    分离数据库: sp_detach_db;附加数据库:sp_attach_db 后接表明,附加需要完整的路径名

    14.如何修改数据库的名称:

    sp_renamedb 'old_name', 'new_name'

    下面说的是实战教程,主要讲学生管理数据库。

    更深一步,更详细一点的东西。

    基础部分

    查询

    SELECT 姓名 as 学生姓名,性别 from学生信息        查询出来的列名是 学生姓名,性别,

    SELECT DISTINCT 民族 from 学生信息            DISTINCT的作用是防止结果重复SELECT * FROM 员工信息 WHERE 民族='汉族' AND 性别='女'AND 家庭住址='河南商丘'

     或

    SELECT * FROM 员工信息 WHERE 民族='汉族' AND 性别='女' AND 家庭住址 like '河南%'

                                      % 表示通配符,like的作用与等号相似

    排序ORDER BY

    SELECT * FROM 成绩信息 WHERE 考试编号='0801'AND 课程编号='1'

    ORDER BY 分数 DESC,学生编号  DESC表示降序,ASC表示升序(默认)

     

    分组

    SELECT 考试编号,课程编号,AVG(分数) FROM 成绩信息 WHERE 考试编号='0801'GROUP BYcobe 课程编号

    SELECT 考试编号,课程编号,AVG(分数) FROM 成绩信息 GROUP BY cobe 课程编号

    cobe ()

    rollup()

    CUBE 运算符生成的结果集是多维数据集。多维数据集是事实数据的扩展,事实数据即记录个别事件的数据。扩展建立在用户打算分析的列上。这些列被称为维。多维数据集是一个结果集,其中包含了各维度的所有可能组合的交叉表格。

     

    CUBE 运算符在 SELECT 语句的 GROUPBY 子句中指定。该语句的选择列表应包含维度列和聚合函数表达式。GROUP BY 应指定维度列和关键字 WITH CUBE。结果集将包含维度列中各值的所有可能组合,以及与这些维度值组合相匹配的基础行中的聚合值。

    CUBE 和 ROLLUP 之间的区别在于: 

     

    CUBE 生成的结果集显示了所选列中值的所有组合的聚合。

     

    ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。

     

    使用函数

    SELECT TOP 3 分数 FROM 成绩信息WHERE 考试编号='0801' AND 考试编号='2'

    RODER BY 分数 DESC

     

    MIN()最小数 ; MAX()最大数 ; AVG()平均数 ; SUM()和; top number前几名

    使用HAVING子句

    SELECT 考试编号,课程编号,AVG(分数) FROM 成绩信息 GROUP BY cobe (课程编号)

    HAVING AVG(分数)>=90

    RODER BY 分数 DESC

    插入数据

    SELECT * FROM 学生信息

    INSERT INTO 学生信息 (学号,姓名,家庭住址)  VALUES  ('2009100101','李明','河南')

    INTERT...SELECT语句

    INTERT  学生信息1

    Select * FROM 学生信息 where 家庭住址 like '河南'

    SELECT...INTO语句

    SELECT *

    into #STUDENT          ‘临时表’

    from 学生信息

    where 性别='男

    update 语句

    select * from 学生信息

    update 学生信息 set 姓名='李俊',出生日期=‘1994-4-8’ where 学号=‘12345’

    扩展部分

     

    1.在查询结果中显示列名:
    a.用as关键字:select name as '姓名'   from students order by age
    b.直接表示:select name '姓名'   from students order byage

    2.精确查找:
    a.用in限定范围:select * fromstudents where native in ('湖南', '四川') 
    b.between...and:select * from students where age between 20 and 30
    c.“=”:select * fromstudents where name = '李山' 
    d.like:select * from students where name  like  '李%' (注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令:'%李%';若是第二个字为李,则应为'_李%'或'_李'或'_李_'。)
    e.[]匹配检查符:select * from courses where cno like '[AC]%' (表示或的关系,与"in(...)"类似,而且"[]"可以表示范围,如:select * fromcourses where cno like '[A-C]%')


    3.对于时间类型变量的处理
    a.smalldatetime:直接按照字符串处理的方式进行处理,例如:
     select * from students where birth > = '1980-1-1' and birth <= '1980-12-31'


    4.集函数
    a.count()求和,如:selectcount(*)  from students (求学生总人数)
    b.avg(列)求平均,如:selectavg(mark)  from grades where cno=’B2’
    c.max(列)和min(列),求最大与最小

    5.分组group
    常用于统计时,如分组查总数:
      select gender,count(sno)  
      from students
      group by gender
    (查看男女学生各有多少)
    注意:从哪种角度分组就从哪列"group by"
    对于多重分组,只需将分组规则罗列。比如查询各届各专业的男女同学人数 ,那么分组规则有:届别(grade)、专业(mno)和性别(gender),所以有"groupby grade, mno, gender"
    select grade, mno, gender, count(*)
    from students
    group by grade, mno, gender
    通常group还和having联用,比如查询1门课以上不及格的学生,则按学号(sno)分类有:
    select sno,count(*) from grades 
    where mark<60
    group by sno
    having count(*)>1


    6.UNION联合
    合并查询结果,如:
    SELECT * FROM students
    WHERE name like ‘张%’
    UNION [ALL]
    SELECT * FROM students
    WHERE name like ‘李%’

    注意union与unionall的区别:

    前者要把重复项做个过滤,在结果中只显示一条重复的信息;而后者则不管。所以可以看出union与 union all所用算法不同,后者要简单许多。从调优角度上讲,推荐用union all,这样查询效率会提高不少。


    7.多表查询
    a.内连接
    selectg.sno,s.name,c.coursename 
       from grades g JOIN students s ON g.sno=s.sno
           JOIN courses c ON  g.cno=c.cno
    (注意可以引用别名)
    b.外连接
    b1.左连接
    selectcourses.cno,max(coursename),count(sno) 
    from courses LEFT JOIN grades ON courses.cno=grades.cno 
    group by courses.cno
    左连接特点:显示全部左边表中的所有项目,即使其中有些项中的数据未填写完全。

    左外连接返回那些存在于左表而右表中却没有的行,再加上内连接的行。
    b2.右连接
    与左连接类似
    b3.全连接
    selectsno,name,major 
    from students FULL JOIN majors ON students.mno=majors.mno
    两边表中的内容全部显示
    c.自身连接
    selectc1.cno,c1.coursename,c1.pno,c2.coursename 
    from courses c1,courses c2  where c1.pno=c2.cno
    采用别名解决问题。
    d.交叉连接
    selectlastname+firstname from lastname CROSS JOIN firstanme
    相当于做笛卡儿积


    8.嵌套查询
    a.用关键字IN,如查询李山的同乡:
    select  *  from students
    where  native  in  (select native from students where name=’ 李山’) 
    b.使用关键字EXIST,比如,下面两句是等价的:
    select * fromstudents
    where sno in (select sno from grades where cno=’B2’)

    select * fromstudents where exists  
    (select * from grades where 
    grades.sno=students.sno AND cno=’B2’)

     


    9.关于排序order
    a.对于排序order,有两种方法:asc升序和desc降序
    b.对于排序order,可以按照查询条件中的某项排列,而且这项可用数字表示,如:
    selectsno,count(*) ,avg(mark) from grades 
    group by sno
    having avg(mark)>85
    order by 3

    10.其他
    a.对于有空格的识别名称,应该用"[]"括住。
    b.对于某列中没有数据的特定查询可以用null判断,如select sno,courseno from grades where mark IS NULL
    c.注意区分在嵌套查询中使用的any与all的区别,any相当于逻辑运算“||”而all则相当于逻辑运算“&&”
    d.注意在做否定意义的查询是小心进入陷阱:
    如,没有选修‘B2’课程的学生 :
    select students.*
    from students, grades
    where students.sno=grades.sno
              AND grades.cno <>’B2’                  
    上面的查询方式是错误的,正确方式见下方:
    select * from students
    where not exists  (select * from grades 
    where grades.sno=students.sno AND cno='B2')

    11.关于有难度多重嵌套查询的解决思想:
    如,选修了全部课程的学生:
    select *
    from students
    where not exists (       select *
       from courses
       where NOT EXISTS 
        (select *
          from grades
          where sno=students.sno
         AND cno=courses.cno))
       以上是关于我看数据库视频的知识点总结,和一些扩展使用,以及我希望学习的东西。(注:部分内容来之网络)

     


    展开全文
  • 数据库基础知识汇总(一)

    万次阅读 多人点赞 2018-09-03 18:42:22
    数据库语言四大类 DQL(Data Query Language):数据库查询语言。 DDL(Data Definition Language):数据库定义语言。定义关系模式、删除关系、修改关系模式。 关系、属性 DML(Data Manipulation Language):...

    五个基本的关系代数操作

    • 并、差、笛卡尔积、选择、投影

    数据库语言四大类

    • DQL(Data Query Language):数据库查询语言。

    • DDL(Data Definition Language):数据库定义语言。定义关系模式、删除关系、修改关系模式。

      • 关系、属性
    • DML(Data Manipulation Language):数据库操纵语言。插入元组、删除元组、修改元组。

      • 元组
    • DCL(Data Control Language):数据库控制语言。用来授权或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果。

      • GRANT、revoke
      • commit / rollback work

    完整性

    • 实体完整性:要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空”(NULL)或重复。

      • 主键
    • 参照完整性:对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性。

      • 外键
    • 自定义完整性

    基础操作

    • 创建关系
    create table instructor2(
        id char(5) not null,
        name varchar(20) not null,
        dept_name varchar(20) not null,
        salary numeric(8,2),
        primary key(id)
    );

    结果如图。可看出对属性进行了相关定义。

    这里写图片描述

    • 插入元组

      • insert into 关系名 values(每个属性对应的值);
    insert into instructor2 values(00001,'ai','math',2500.37);
    insert into instructor2 values(00002,'la','math',3700.89);
    insert into instructor2 values(00003,'bi','math',5400.45);
    insert into instructor2 values(00004,'ma','english',1450.23);
    insert into instructor2 values(00005,'ye','english',3421.34);
    insert into instructor2 values(00006,'er','technology',10000.65);

    结果如图

    这里写图片描述

    • 删除所有元组

      • delete from 关系名;
        • 删除了元组,但关系和属性还存在。
          这里写图片描述
    • 删除关系

      • drop table 关系名;
        • 删除了关系,进行select查询时会出现关系名无效的错误。
          这里写图片描述
    • 属性操作

      • alter table 关系名 add 新属性 数据类型,新属性 数据类型,

        • 例:alter table instructor2 add firstname varchar(20),lastname varchar(20);
          这里写图片描述
      • alter table 关系名 drop 属性,

        • 例:alter table instructor2 drop firstname ,lastname ;
    • 查询语句基础结构

      • select对应投影Π
      • from对应笛卡尔积
      • where对应选择σ
      • 含义
        • (1).为from子句列出的关系产生笛卡尔积。
        • (2).在(1)的结果上应用where子句中指定的谓词(条件)。
        • (3).对于(2)中的元组,输出select子句中指定的属性。
    select *(属性1,属性2...)
    from 关系名1,关系名2...
    where 条件1 and 条件2 and ...;

    select id,name,salary
    from instructor2
    where salary>4000;

    结果如下

    这里写图片描述

    • 去重操作(distinct)

      • 对于一些属性来说,在某些元组中存在相同的值,有时我们需要对结果去重,得到正确答案。
    select distinct 属性名
    from 关系名
    where 条件

    例如:当我们想要查看系名时,多个老师可能位于同一个系,不去重将产生下列结果:

    这里写图片描述

    显然这不是我们想要的答案。我们只需要知道存在哪些系,而无需知道个数:

    这里写图片描述

    • 更名操作(as)

      • 优点
        • 方便:长名字变短名字,便于书写语句。
        • 同一关系笛卡尔积:区分属性。
      • 对属性:
      • 对关系:
    select 属性 as 属性别名
    from 关系名
    where 条件
    select 属性
    from 关系名 as 关系别名
    where 条件

    例:属性别名

    select name as instructor_name,salary
    from instructor2
    where salary>3500;

    结果如下


    这里写图片描述

    例:关系别名

    select i1.id,i2.name
    from instructor2 as i1,instructor2 as i2
    where i1.id=i2.id and i2.salary>3500;

    结果如下

    这里写图片描述

    • 字符串运算(like)

      • SQL使用一对单引号来标示字符串,例‘math’。
      • 百分号(%):匹配任意子串
      • 下划线(_):匹配任意一个字符
    select 属性
    from 关系名
    where 属性 like '字符形式';

    select *
    from instructor2
    where salary like '%0_.%';

    结果如下

    这里写图片描述

    • 显示次序(order by)

      • 默认升序:asc
      • 降序:desc
    select 属性
    from 关系名
    where 条件
    order by 属性 升序/降序;

    select *
    from instructor2
    order by salary desc;

    结果如下

    这里写图片描述

    • betweenand

      • 属性值介于某个范围内
    select *
    from instructor2
    where 属性名 between ... and ... ;

    select *
    from instructor2
    where salary between 3000 and 6000;

    结果如下

    这里写图片描述

    • 分组聚集(group by)

      • 聚集函数:平均值(avg)、最小值(min)、最大值(max)、总和(sum)、计数(count)。
      • 出现在select语句中但没有被聚集的属性只能是出现在group by子句中的属性
      • 错误查询
    select dept_name,id,avg(salary)
    from instructor2
    group by dept_name;

    结果如下

    这里写图片描述

    • having子句(出现group by时使用)

      • 有group by时,select 和 having子句中出现的属性有所限制
      • 任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中。
      • 正确查询
    select dept_name,avg(salary) as avg_salary
    from instructor2
    group by dept_name
    having avg(salary)>3000

    结果如下

    这里写图片描述

    • 集合成员资格

      • in:测试元组是否是集合的成员
      • not in:测试元组是否不是集合的成员
      • in和 not in 操作符用于枚举集合
    select *
    from instructor2
    where name not in('ai','ye','er');

    结果如下

    这里写图片描述

    例: 注意内层查询语句的select对应的属性应与外层查询语句的where对应的属相同

    select *
    from instructor2
    where name in (select name
                from instructor2
                where salary>3000
                );

    过程:相当于两层for循环

    这里写图片描述
    结果如下
    这里写图片描述

    • 集合的比较

      • >some:至少比某一个要大
      • >all:比所有的都大。
      • >some、<some、>=some、<=some、<>some
      • >all、<all、>=all、<all、<all
      • =some等价于in,<>some并不等价于not in
      • <>all等价于not in,=all不等价于in

    例:查询工资大于3000的教师姓名

    select *
    from instructor2
    where name =some(select name
                     from instructor2
                     where salary>3000
                    );

    结果如下

    这里写图片描述

    例:查询工资小于等于3000的教师姓名

    select *
    from instructor2
    where name <>all(select name
                     from instructor2
                     where salary>3000
                    );

    结果如下

    这里写图片描述

    错误查询实例
    例:查询工资小于等于3000的教师姓名

    select *
    from instructor2
    where name <>some(select name
                     from instructor2
                     where salary>3000
                    );

    结果如下(分析:内层查询中只要有一条元组的salary>3000并且name和外层查询name值不相等即可)

    这里写图片描述

    例:查询工资大于3000的教师姓名

    select *
    from instructor2
    where name =all(select name
                     from instructor2
                     where salary>3000
                    );

    结果如下(分析:内层查询中满足salary>3000的所有元组的name都和外层查询name值相等才可以)

    这里写图片描述

    • 空关系测试(exists)

      • 存在exists是相对于某一条元组,因而子查询中是select *

    例:查询在2009年秋季学期和2010年春季学期同时开课的所有课程

    select course_id
    from section as S
    where semester='Fall' and year=2009 and exists(select *
                     from section as T
                     where semester='Spring' and year=2010
                     and S.course_id=T.course_id
                    );
    • 删除某些元组

    例:从instructor关系中删除与‘math’系教师有关的所有元组

    delete from instructor
    where dept_name='math';
    • 删除所有元组
    delete from instructor;
    • 删除的特殊情况

      • 内层语句只有一条元组。

    例:删除工资低于大学平均工资的教师记录。

    delete from instructor2
    where salary < (
                select avg(salary)
                from instructor2
            );
    
    select *
    from instructor2;

    结果如下

    这里写图片描述

    • 插入一些元组

      • insert into 关系名 values();一次只能插入一条元组。
      • insert into 关系名 selec查询语句可一次性插入多条。

    insert into instructor2
        select id,name,dept_name,18000
        from student
        where dept_name='math';
    • 更新元组
    update 关系名
    set 语句
    where 条件;

    例:只给工资低于7000元的教师涨工资。

    update instructor2
    set salary=salary*1.05;
    where salary<7000;

    例:给工资低的教师涨5%,大于7000的涨3%

    update instructor2
    set salary=case
            when salary<=7000 then salary*1.05
            else salary*1.03
        end
    展开全文
  • 数据库基础知识(概念型)

    万次阅读 多人点赞 2019-06-10 20:58:46
    数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。特点:永久存储、有组织、可共享。 3、数据库管理系统(DBMS):位于用户与操作系统之间的...

    第一章  概念

    1、数据:描述事物的符号记录称为数据。特点:数据和关于数据的解释不可分。

    2、数据库:长期存储在计算机内、有组织、可共享的大量的数据的集合。数据库中的数据按照一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。特点:永久存储、有组织、可共享。

    3、数据库管理系统(DBMS):位于用户与操作系统之间的一层数据管理软件。主要功能:数据定义功能(DDL);数据组织、存储和管理;数据操纵功能(DML);数据库的事务管理和运行管理;数据库的建立和维护功能;其他功能。

    4、数据库系统(DBS):由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。

    5、数据管理技术三个阶段:人工管理、文件系统、数据库系统。

    6、两类数据模型:概念模型(又叫信息模型);逻辑模型、物理模型

    7、数据模型的组成要素:数据结构、数据操纵和数据的完整性约束条件。

    8、概念模型:用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具也是数据库设计人员与用户之间进行交流的语言。

    9、信息世界中的概念:实体、属性、码、域、实体型、实体集、联系;两个实体之间的联系又分为一对一,一对多,多对多。

    10、E-R图:表示实体型、属性和联系的方法,实体型用矩形,属性用椭圆,联系用菱形。

    11、关系的完整性约束条件包括三大类:实体完整性、参照完整性、和用户自定义完整性。

    12、数据库系统的三级模式结构:模式、外模式、内模式。数据库的二级映像:外模式/模式映像,模式/内模式映像。

    第二章 关系数据库

    1、关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

    2、关系操作:查询操作和插入、删除、修改操作两大部分。查询操作又可分为选择、投影、连接、除、并、差、交、笛卡尔积等。

    3、实体完整性:主属性不能为空;参照完整性:关系与关系间的引用(一般为两张表,或者一张表内部也存在);用户自定义的完整性。

    第三章 关系数据库标准语言SQL

    1、SQL:结构化查询语言。

    2、外模式对应于视图和部分表,模式对应于基本表,内模式对应于存储文件。

    3、基本表:本身独立存在的表,在SQL中一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。

    4、视图:从一个或几个基本表中导出的表,本身不存在于数据库中,即数据库中只存放视图的定义不存放视图对应的数据,视图是一个虚表,可以在视图上再定义视图。

    5、存储文件:其逻辑结构组成了关系数据库的内模式,其物理结构是任意的,对用户是透明的。

    6、SQL的数据定义语句:

    7、数据类型:

     

    展开全文
  • Mysql数据库基础入门视频教程

    万人学习 2019-06-27 11:05:50
    Mysql数据库基础入门视频课程:属于零基础Mysql数据库教程,从数据库的基本专业术语介绍到数据库软件的下载使用 一步一步带你安装MySql。SQL阶段你将学会如果使用数据定义语言DDL,数据操作语言DML,数据查询语言DQL ...
  • 文章目录1、关系数据库2、列式数据库3、键值数据库4、图形数据库5、分布式文档存储数据库 数据是一个企业的核心资产,几乎所有的企业应用系统都是围绕数据来进行的,包括数据的增删改查,数据对企业,甚至国家来说...
  • 数据库破解版

    千次阅读 2019-07-11 14:19:44
    Navicat for sqlite ... 软件介绍 其它版本 相关合集 ...navicat for sqlite 12是navicat for sqlite系列软件的新版本,又称之为navicat 12 for sqlite,是一款强大而全面的SQLite图形用户界面,...
  • 7种常见数据库

    万次阅读 2018-08-06 20:02:56
    关系型数据库:SQLite、Oracle、Mysql 特性:1、关系型数据库,是指采用了关系模型来组织数据的数据库; 2、关系型数据库的最大特点就是事务的一致性; 3、简单来说,关系模型指的就是二维表格模型,而一个关系...
  • 数据库系统概念

    万次阅读 多人点赞 2019-10-09 11:22:15
    1.4 数据库语言 第二章、关系模型介绍 2.1 关系数据库的结构 2.2 数据库模式 2.3 码 第三章、SQL 3.1 SQL 查询语言概览 3.2 SQL数据定义 3.2.1基本类型 3.2.2基本模式定义 3.3 sql查询的基本结构 3.3.1 ...
  • 常用数据库排名及分类介绍

    万次阅读 多人点赞 2020-07-16 17:57:33
    DB-Engines:2019年6月全球数据库排行 DB-Engines 数据库流行度排行榜 6 月更新已发布,排名前二十如下:总体排名和上个月相比基本一致,其中排名前三的Oracle、MySQL 和 Microsoft SQL Server 也是分数增加最多的...
  • 数据库基本知识点总结

    万次阅读 多人点赞 2017-11-21 13:43:48
    数据库也是计算机类笔试面试中不可避免会遇到的考点,尤其是银行和部分传统软件类公司。这里根据整理的资料,对数据库的相关知识也做个总结吧。希望学过数据库但长时间不用的同学根据这些知识能够回忆和重拾,没学过...
  • 数据库的简介与类型

    万次阅读 多人点赞 2019-05-07 10:50:09
    1.1 什么是数据库? 简单的说,数据库(英文Database)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法...
  • 数据库基本概念&SQL简介

    万次阅读 多人点赞 2018-06-15 17:25:29
    本篇内容转自维基百科一:数据库基本概念1,数据库 数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在...
  • 数据库系统概念(原书第6版)》是经典的数据库系统教科书《Database System Concepts》的新修订版,全面介绍数据库系统的各种知识,透彻阐释数据库管理的基本概念。本书内容丰富,不仅讨论了关系数据模型和关系语言...
  • 数据库原理 知识点总结

    万次阅读 多人点赞 2012-05-01 12:59:33
    名词积累: 数据库(Database):...数据库系统(Database System):包括数据库、DBMS、应用系统、数据库管理员(DBA) 主键(Primary Key):用于唯一的标识表中的某一条记录的属性或属性的集合。 外键(Foreign
  • 数据库系统概念复习资料 复习题 期末复习 习题集 期中考试卷 资料整理 期末复习的时候,整理了较多的材料,包括了各个章节的习题以及知识点整理,还有几套期中、期末考试卷,内容较多,分享给大家 word文档内容...
  • 数据库系统概论》第五版(王珊版)全书知识梳理

    万次阅读 多人点赞 2020-02-23 11:21:01
    写在前面: 恰逢期末复习,用了几天时间结合老师勾画的重点以及课件... 《数据库系统概论》第五版(王珊版)全书知识梳理 《计算机组成原理》第五版(唐朔飞考研版) 全书知识梳理 《数据结构》C语言版 (清华严...
  • 数据库基础知识  本篇蛤蟆要梳理下那些被淡忘的数据库基础知识,也许根本就没被人记住过。不管是哪种情况,该记住的必须记住,记不住就把他记下来吧。 首先问几个问题如下: 数据库基础知识是什么?  好吧,蛤蟆...
  • SQL Server基础知识概念要点详细讲解

    万次阅读 2019-08-02 15:07:26
    SQL Server基础知识概念要点详细讲解 目录 基础概念 1、网状模型数据库 2、层次模型数据库 3、关系模型数据库 知识点实例总结 基础概念 SQL语言中,between and表示包括两边参数。%取余,/取商 ...
1 2 3 4 5 ... 20
收藏数 181,601
精华内容 72,640
关键字:

数据库