您的位置:首页 > 汽车 > 时评 > 我想学室内设计怎么学_长沙有什么好玩的水上乐园_线上营销策划案例_建站系统cms

我想学室内设计怎么学_长沙有什么好玩的水上乐园_线上营销策划案例_建站系统cms

2024/11/18 9:31:42 来源:https://blog.csdn.net/XFanny/article/details/143136585  浏览:    关键词:我想学室内设计怎么学_长沙有什么好玩的水上乐园_线上营销策划案例_建站系统cms
我想学室内设计怎么学_长沙有什么好玩的水上乐园_线上营销策划案例_建站系统cms

目录

  • 前言
  • 第9章 数据库技术基础(6分)
    • 9.1 基本概念
      • 9.1.1 数据库与数据库系统
      • 9.1.5 数据库的三级模式结构
    • 9.2 数据模型
      • 9.2.1 数据模型的基本概念
      • 9.2.2 数据模型的三要素
      • 9.2.3 E-R模型
      • 9.2.4 数据模型
    • 9.3 关系代数
      • 9.3.1 关系数据库的基本概念
        • 9.3.1.1 关系模型
      • 9.3.2 5种基本的关系代数运算
      • 9.3.3 扩展的关系代数运算
    • 9.4 关系数据库SQL语言简介
      • 9.4.2 关系数据库SQL简介
      • 9.4.3. SQL数据定义
        • 9.4.3.1 创建表(CREATE TABLE)
        • 9.4.3.2 修改和删除表
        • 9.4.3.3 索引建立与删除
        • 9.4.3.4 视图创建与删除
      • 9.4.4 SQL数据查询
      • 9.4.5 SQL数据更新
      • 9.4.6 表的连接查询
        • 9.4.6.1 内连接(INNER JOIN)的实现
        • 9.4.6.2 外连接(OUTER JOIN)的实现
          • 9.4.6.2.1 左外连接(LEFT OUTER JOIN)
          • 9.4.6.2.2 右外连接(RIGHT OUTER JOIN)
        • 9.4.6.3 满外连接(FULL OUTER JOIN)
        • 9.4.6.3 代码实现
        • 9.4.6.4 语法格式小结
        • 9.4.6.5 自然连接
      • 9.4.7 子查询
        • 9.4.7.1 单行子查询
        • 9.4.7.2 代码示例
        • 9.4.7.3 多行子查询
        • 9.4.7.4 代码示例
        • 9.4.7.5 相关子查询
        • 9.4.7.6 EXISTS 与 NOT EXISTS关键字
      • 9.4.8 SQL访问控制
    • 9.5 关系数据库的规范化
      • 9.5.1 函数依赖
      • 9.5.2 规范化
      • 9.5.2【技巧总结】
        • 9.5.2.1 判断部分函数依赖技巧
        • 9.5.2.2 判断传递函数依赖技巧
      • 9.5.3 模式分解及分解应具有的特性
    • 9.6 数据库的控制功能
      • 9.6.1 事务管理
      • 9.6.2 数据库的备份与恢复
      • 9.6.3 并发控制
      • 分布式数据库(熟记)在9.1.4里面
  • 结语


前言

在备考软件设计师中级考试的过程中,我遇到了些许挑战,也收获了宝贵的经验。为了帮助其他同样正在为这门考试(证书)奋斗的朋友们,我决定将我的笔记整理出来,与大家分享。这些笔记不仅包含了书本上的知识,还加入了我对重点和难点的个人理解以及考试技巧,力求帮助大家更加高效地复习。我希望这份笔记能够成为你备考路上的一份支持,也祝愿你在考试中取得理想的成绩👍👍👍

如果有写的不好或者需要改进的地方,恳请在评论区指正!🤓🤓🤓


第9章 数据库技术基础(6分)

9.1 基本概念

9.1.1 数据库与数据库系统

码:唯一标识实体的属性集称为码,例如学号是学生实体的码。
域:属性的取值范围称为该属性的域,例如性别域为(男,女)

9.1.5 数据库的三级模式结构

图9-5 数据库系统体系结构

数据库系统才有三级模式结构,这是数据库管理系统内部的系统结构。

  1. 概念模式——> 基本表,也称模式
    概念模式也称模式,它是数据库中全部数据的逻辑结构和特征的描述,由若干个概念记录类型组成,只涉及型的描述,不涉及具体的值。概念模式的一个具体值称为模式的一个实例,同一个模式可以有很多实例。
    需要说明的是,概念模式不仅要描述概念记录类型,还要描述记录间的联系、操作以及数据的完整性和安全性等要求。但是,概念模式不涉及存储结构、访问技术等细节。只有这样,概念模式才算做到了“物理数据独立性”。
    描述概念模式的数据定义语言称为“模式DDL(Schema Data Definition Language)”。

  2. 外模式——> 视图,也称用户模式子模式
    外模式也称用户模式或子模式,是用户与数据库系统的接口,是用户用到的那部分数据的描述。它由若干个外部记录类型组成。用户使用数据操纵语言对数据库进行操作,实际上是对外模式的外部记录进行操作。
    描述外模式的数据定义语言称为“外模式DDL”。有了外模式后,程序员不必关心概念模式,只与外模式发生联系,按外模式的结构存储和操纵数据。

  3. 内模式——> 存储文件,也称存储模式
    内模式也称存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。例如,记录的存储方式是顺序存储,按照B树结构存储,还是Hash方法存储;索引按照什么方式组织;数据是否压缩存储,是否加密;数据的存储记录结构有何规定。
    描述内模式的数据定义语言称为“内模式DDL”。
    注意,内部记录并不涉及物理记录,也不涉及设备的约束。它比内模式更接近于物理存储和访问的那些软件机制,是操作系统的一部分(即文件系统)。例如,从磁盘上读、写数据。
    总之,数据按外模式的描述提供给用户,按内模式的描述存储在磁盘上,而概念模式提供了连接这两级模式的相对稳定的中间层,并使得两级中任意一级的改变都不受另一级影响。

  4. 两级映像
    数据库系统在三级模式之间提供了两级映像:模式/内模式映像、外模式/模式映像。
    模式/内模式映像:该映像存在于概念级和内部级之间,实现了概念模式到内模式之间的相互转换。
    外模式/模式映像:该映像存在于外部级和概念级之间,实现了外模式到概念模式之间的相互转换。
    DBMS 的两级映像功能保证了数据的独立性。(逻辑独立性和物理独立性)

    1. 数据的物理独立性。为了保证应用程序能够正确执行,需要修改概念模式和内模式之间的映像。
    2. 数据的逻辑独立性。为了保证应用程序能够正确执行,需要修改外模式概念模式之间的映像。

9.2 数据模型

9.2.1 数据模型的基本概念

模型就是对现实世界特征的模拟和抽象,数据模型是对现实世界数据特征的抽象。对于具体的模型人们并不陌生,如航模飞机、地图和建筑设计沙盘等都是具体的模型。最常用的数据模型分为概念数据模型和基本数据模型。

  1. 概念数据模型。概念数据模型也称信息模型,是按用户的观点对数据和信息建模;是现实世界到信息世界的第一层抽象,强调其语义表达功能,易于用户理解:是用户和数据库设计人员交流的语言,主要用于数据库设计。这类模型中最著名的是实体-联系模型,简称 E-R模型。
  2. 基本数据模型(结构数据模型)。它是按计算机系统的观点对数据建模,是现实世界数据特征的抽象,用于 DBMS 的实现。基本的数据模型有层次模型、网状模型、关系模型和面向对象模型 (ObjeetOriented Model)。

9.2.2 数据模型的三要素

  1. 数据结构
  2. 数据操作
  3. 数据的约束条件

9.2.3 E-R模型

  1. 实体:在E-R模型中,实体用矩形表示,通常矩形框内写明实体名。实体是现实世界中可以区别于其他对象的“事件”或“物体”。

  2. 联系
    在E-R 模型中,联系用菱形表示,通常菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标注上联系的类型(1:1、1:n或m:m)。实体的联系分为实体内部的联系和实体与实体之间的联系。实体内部的联系反映数据在同一记录内部各字段间的联系。

    1. 两个不同实体之间的联系
      两个不同实体集之间存在以下3种联系类型。

      • 一对一(1:1)。指实体集E1,中的一个实体最多只与实体集E2中的一个实体相联系。
      • 一对多(1:n)。表示实体集E1中的一个实体可与实体集E2中的多个实体相联系。
      • 多对多(m:n)。表示实体集E1,中的多个实体可与实体集E2中的多个实体相联系。

      图9-6 两个不同实体集之间的联系

    2. 两个以上不同实体集之间的联系
      两个以上不同实体集之间存在1:1:1、1:1:n、1:m:n和r:m:n的联系。

    3. 同一实体集内的二元联系
      同一实体内的各实体也存在1:1、1:n和m:n的联系,如图9-8所示。

      图9-8 同一实体集之间的联系

  3. 属性

    1. 简单属性和复合属性。简单属性是原子的、不可再分的,复合属性可以细分为更小的部分(即划分为别的属性)。有时用户希望访问整个属性,有时希望访问属性的某个成分,那么在模式设计时可采用复合属性。例如,职工实体集的通信地址可以进一步分为邮编、省、市、街道。若不特别声明,通常指的是简单属性。
    2. 单值属性和多值属性。在前面所举的例子中,定义的属性对于一个特定的实体都只有单独的一个值。例如,对于一个特定的职工,只对应一个职工号、职工姓名,这样的属性称为单值属性。但是,在某些特定情况下,一个属性可能对应一组值。例如,职工可能有0个、1个或多个亲属,那么职工的亲属的姓名可能有多个数目,这样的属性称为多值属性。
    3. NULL属性。当实体在某个属性上没有值或属性值末知时,使用 NULL 值,表示无意义或不知道。
    4. 派生属性。派生属性可以从其他属性得来。例如,职工实体集中有“参加工作时间’和“工作年限”属性,那么“工作年限”的值可以由当前时间和参加工作时间得到。这里,“工作年限”就是一个派生属性。
  4. 实体-联系方法
    概念模型中最常用的方法为实体-联系方法,简称 E-R 方法。该方法直接从现实世界中抽象出实体和实体间的联系,然后用非常直观的 E-R 图来表示数据模型。在E-R图中有如表 9-1所示的几个主要构件。

表9-1 E-R图中的主要构件

  1. 扩充的E-R模型
    1. 弱实体
      在现实世界中有一种特殊的联系,这种联系代表实体间的所有(Ownership)关系,例如职工与家属的联系,家属总是属于某职工的。这种实体对于另一些实体具有很强的依赖关系,即一个实体的存在必须以另一个实体为前提,将这类实体称为弱实体。在扩展的 E-R图中,弱实体用双线矩形框表示。图9-10 为职工与家属的 E-R图。
      图9-10 弱实体与依赖联系

9.2.4 数据模型

  1. 层次模型,采用树型结构表示数据与数据间的联系。在层次模型中,每一个结点表示一个记录类型(实体),记录之间的联系用结点之间的连线表示,并且根结点以外的其他结点有且仅有一个双亲结点。
  2. 网状模型,也成DBTG模型,常用存储结构链接法,该是一个比层次模型更具有普遍性的数据结构,是层次模型的一个特例。
  3. 关系模型,是一种用二维表格结构来表示实体以及实体之间联系的数据模型。是目前最常用的数据模型之一。关系数据库系统采用关系模型作为数据的组织方式,在关系模型中用表格结构表达实体集以及实体集之间的关系,其最大特色是描述的一致性。
  4. 面向对象模型,采用面向对象的方法来设计数据库。

9.3 关系代数

9.3.1 关系数据库的基本概念

  1. 属性和域
  2. 笛卡尔积与关系【后面详细说明】
  3. 关系的相关名词
  4. 关系的3种类型
  5. 关系数据库模式
  6. 关系模型中的关系完整性约束【与9.3.1.1相关联】
    1. 实体完整性(Entity Integrity)。关系中主码的值不能为空或部分为空,也就是说,主码中属性即主属性不能取空值,规定基本关系R的主属性A 不能取空值。
    2. 参照完整性(Referential Integrity)。参照完整性:如果关系R2的外码X与关系R1的主码相对应(基本关系R2和R1不一定是不同的关系,即它们可以是同一个关系),则外码X的每个值必须在关系R1中主码的值中找到,或者为空值。现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系是用关系来描述的,这样自然就存在着关系与关系间的引用。
      例如,员工和部门关系模式的表示如下,其中在关系模式主属性上加下划线表示该属性为主码属性。
      员工(员工号,姓名,性别,参加工作时间,部门号)
      部门(部门号,名称,电话,负责人)
    3. 用户定义完整性。指用户对某一具体数据指定的约束条件进行检验
9.3.1.1 关系模型

基本术语

  • 关系:一个关系就是一张二维表,每个关系有一个关系名。
  • 元组:表中的一行即为一个元组,对应存储文件中的一个记录值。
  • 属性:表中的列称为属性,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。
  • 域:属性的取值范围,即不同元组对同一个属性的值所限定的范围。例如,逻辑型属性只能从逻辑真(如下)或逻辑假(如F)两个值中取值。
  • 关系模式:对关系的描述称为关系模式,由关系名和其属性集合构成,关系模式的格式为:
    关系名(属性名1,属性名2,……)
  • 候选码(或候选键):属性或属性组合,其值能够唯一地标识一个元组。
  • 主码(或主键):在一个关系中可能有多个候选码,从中选择一个作为主码。
  • 主属性:包含在任何候选码中的属性称为主属性,不包含在任何候选码中的属性称为非主属性。
  • 外码(或外键):如果一个关系中的属性或属性组并非该关系的码,但它们是另外一个关系的码,则称其为该关系的外码。
  • 全码:关系模式的所有属性组是这个关系模式的候选码,称为全码。
  • 超码(超键):一个包含码的属性集称为超码,例如学号是码,则(学号,姓名)就是一个超码。

可以将关系定义为元组的集合,关系模式则是指定的属性集合,元组是属性值的集合。一个具体的关系模型是若干个关系模式的集合。

9.3.2 5种基本的关系代数运算

图9-15 运算结果

  1. 并(Union)
    关系R与S具有相同的关系模式,即R与S的元数相同(结构相同)。关系R与S的并是由属于R或属于S的元组构成的集合,记作RUS
  2. 差(Difference)
    关系R与S具有相同的关系模式,关系R与S的差是由属于R但不属于S的元组构成的集合,记作R-S
  3. 广义笛卡尔积(Extended Cartesian Product)
    两个元数分别为n目和m目的关系R和S的广义笛卡儿积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S
  4. 投影(Projection)
    从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作
    π_A(R)={t[A]|∈ R}
    投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。
  5. 选择(Selection)
    从关系的水平方向进行运算,是从关系R中选择满足给定条件的元组,记作σF®,其形式定义如下:σF®={t|t∈R∧F(t)=True}
    其中,F中的运算对象是属性名(或列的序号)或常熟,运算符、算术比较符(<、>、≤、≥、≠)和逻辑运算符(∧与∨或¬非)。例如σ1≥6(R)表示选取R关系中第1个属性值大于等于第6个属性值的元组;σ1>'6'(R)表示选取R关系中第一个属性值大于等于6的元组。

9.3.3 扩展的关系代数运算

  1. 交∩

  2. 连接
    连接分为θ连接、等价连接和自然连接。

    1. θ连接如图9-16所示。从R与S的笛卡尔积中选取属性间满足一定条件的元组。记作:
      在这里插入图片描述

    其中,XΘY为连接的条件,Θ是比较运算符。
    Θ连接举例:
    图9-16 连接

    1. 等值链接。当Θ为“=”时,称之为等值连接。即X=Y

    2. 自然连接:R⋈S去除相同属性。自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。

      需要特别说明的是,一般链接是从关系的水平方向运算,而自然连接不仅要从关系的水平方向运算,而且要从关系的垂直方向运算。因为自然连接要去掉重复属性,如果没有重复属性,那么自然连接就转化为笛卡尔积。
      图9-17 关系RS

  3. 除(Division)

  4. 广义投影:允许在投影列表中使用算术原酸,实现了对投影运算的扩充。

  5. 外连接
    外连接运算是连接运算的扩展,可以处理由于连接运算而确实的信息。对于图9-20所示的S和SC关系,当对其进行自然连接S⋈SC时,结果如图9-24所示

    1. 左外连接(Left Outer Jion)
    2. 右外连接
    3. 全外连接。完全左外连接和右外连接的操作。

在这里插入图片描述

9.4 关系数据库SQL语言简介

表的主键外键、主体跟参照完整性需要掌握

9.4.2 关系数据库SQL简介

  1. SQL数据库体系结构
  2. SQL的基本组成
    SQL 的基本组成如下。
    (1)数据定义语言(DDL):SQL DDL 提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。
    (2)交互式数据操纵语言(DML):SQL DML 提供SELECT查询、INSERT插入、DELETE删除和UPDATE修改的命令。
    (3)事务控制(Transaction Control):SQL 提供定义事务开始和结束的命令。
    (4)嵌入式 SQL 和动态 SQL:用于嵌入某种通用的高级语言(C、C++、Java、 PL/I、COBOL、 VB 等)中混合编程。其中 SQL 负贵操纵数据库,高级语言负责控制程序流程。
    (5)完整性(Integrity):SQLDDL 包括定义数据库中的数据必须满足的完整性约束条件的命令,对于破坏完整性约束条件的更新将被禁止。
    (6)权限管理(Authorization):SQL DDL 中包括说明对关系和视图的访问权限的命令。

9.4.3. SQL数据定义

9.4.3.1 创建表(CREATE TABLE)

语句格式:

CREATE TABLE<表名>(<列名<数据类型>[列级完整性约束条件]
[,<列名<数据类型>[列级完整性约束条件]][,<表级完整性约束条件>]);

列级完整性约束条件有NULL(空)和UNIQUE(取值唯一),如NOT NULL UNIQUE表示取值唯一,不能取空值。

  • NOT NULL
  • UNIQUE
  • NOT NULL UNIQUE
  • default

完整性约束有3中子句:

  • 主键子句PRIMARY KEY
  • 检查子句CHECK
  • 外键子句FOREIGN KEY

定义列时使用的基本数据类型如下:

  • INT 从-231到231-1的整型数据。存储大小为 4个字节
  • CHAR(size) 定长字符数据。若未指定,默认为1个字符,最大长度255
  • VARCHAR(size) 可变长字符数据,根据字符串实际长度保存,必须指定长度
  • FLOAT(M,D)单精度,占用4个字节,M=整数位+小数位,D=小数位。 D<=M<=255,0<=D<=30,默认M+D<=6
  • DOUBLE(M,D) 双精度,占用8个字节,D<=M<=255,0<=D<=30,默认M+D<=15
  • DECIMAL(M,D)高精度小数,占用M+2个字节,D<=M<=65,0<=D<=30,最大取值范围与DOUBLE相同。
  • DATE 日期型数据,格式’YYYY-MM-DD’
  • BLOB 二进制形式的长文本数据,最大可达4G
  • TEXT 长文本数据,最大可达4G
9.4.3.2 修改和删除表
  1. 修改表(ALTER TABLE)
    语句格式:
    ALTERTABLE<表名>[ADD<新列名><数据类型>[完整性约束条件]][DROP<完整性约束名>][MODIFY<列名<数据类型>];
    
    例如,向“供应商”表S增加Zap“邮政编码”可用如下语句:ALTER TABLE S ADD Zap CHAR(6);
    注意:不论基本表中原来是否已有数据,新增加的列一律为空。
    又如,将Status字段改为整型可用如下语句:
    # 将Status字段改为整型或可用如下语句:
    ALTER TABLE S MODIFY Status INT;
    
  2. 删除表(DROPTABLE)语句格式:
    DROPTABLE<表名>
    
    例如执行DROPTABLE Student,此后关系Student不再是数据库模式的一部分,关系中的元组也无法访问。
9.4.3.3 索引建立与删除
  1. 建立索引
    语句格式:
    CREATE [UNIQUE][CLUSTERJINDEX<索引名>
    ON<表名>(<列名>[<次序>][,<列名>[<次序>]]);
    
    参数说明如下。
    ● 次序:可选ASC(升序)或DSC(降序),默认值为ASC。
    ● UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录。
    ● CLUSTER:表明要建立的索引是聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织。
  2. 删除索引
    语句格式:
    DROP INDEX<索引名>
    
    例如执行DROP INDEX StudentIndex,此后索引Studentlndex不再是数据库模式的一部分。
  3. 内模式
    内模式也成存储模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,定义所有的内部记录类型、索引和文件的组织方式,以及数据控制方面的细节。
9.4.3.4 视图创建与删除
  1. 视图的创建
    语句格式:
    CREATE VIEW视图名(列表名) AS SELECT 查询子句 [WITH CHECK OPTION];
    
    注意:在视图的创建中必须遵循以下规定。
    1. 子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT短语。
    2. WITH CHECK OPTION表示对UPDATEINSERTDELETE操作时保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
    3. 组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由SELECT子查询目标列的主属性组成。
  2. 视图的删除
    语句格式:
    DROP VIEW 视图名
    # 例如,DROP VIEW CS-STUDENT 将删除视图CS-STUDENT
    

9.4.4 SQL数据查询

图9-4 SQL语言

  1. SELECT基本结构(相当于投影π)

    1. SELECT子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。其输出可以是列明、表达式、集函数(AVG、COUNT、MAX、MIN、SUM),DISTINCT选修可以保证查询的结果集中不存在重复元组。
    2. FROM子句对应的关系代数中的笛卡尔积,它列出的是表达式求值过程中需扫描的关系,即在FROM子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作。
    3. WHERE子句对应的关系代数中的选择谓词。WHERE子句的条件表达式中可以使用运算符如表9-3所示。在这里插入图片描述
  2. 简单查询(相当于选择)δ

    SELECT Sno,Sname,AgeFROM SWHERE SD='CS';
    
  3. 连接查询
    若涉及两个以上的表,则称为连接查询。

  4. 子查询与聚集函数

    1. 子查询
      子查询也称嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE查询块可以嵌入另一个查询块之中。在SQL中允许多重嵌套。【后面详细说明】

    2. 聚集函数是以一个值的集合为输入,返回单个值的函数。SQL提供了5个预定义聚集函数平均值AVG、最小值MIN、最大值MAX、求和SUM以及计数COUNT,如表9-4所示。

  5. 分组查询

    1. GROUP BY子句
      在WHERE子句后面加上GROUP BY子句可以对元组进行分组,保留字GROUP BY后面跟着一个分组属性列表。最简单的情况是FROM子句后面只有一个关系,根据分组属性对它的元组进行分组。SELECT子句中使用的聚集操作符仅用在每个分组上。
    2. HAVING子句
      假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,在GROUP BY子句后面跟一个HAVING子句即可。
  6. 更名运算
    SQL提供了可为关系和属性重新命名的机制,这是通过使用具有如下形式的AS子句来实现的:
    Old-name AS new-name
    AS子句既可出现在SELECT子句,也可出现在FROM子句中。

  7. 字符串操作
    对于字符串进行的最常用的操作是使用操作符LIKE的模式匹配。使用两个特殊的字符来描述模式:“%”匹配任意字符串;“_”匹配任意一个字符。模式是大小写敏感的。例如:
    Mary%匹配任何以Mary开头的字符串;%idge%匹配任何包含idge的字符串,例如Marryidge、Rock Ridge、Mianus Bridge和Ridgeway。
    “_”匹配只含两个字符的字符串;“_%”匹配至少包含两个字符的字符串。

  8. 视图的查询

    #【例9.28】建立“计算机系”(CS表示计算机系)学生的视图,并要求进行修改、插入操作时保证该视图只有计算机系的学生。
    CREATE VIEW CS-STUDENT
    AS SELECT Sno,Sname,Sage,Sex
    FROM Student
    WHERE SD='CS'WITH CHECK OPTION;# 此时查询计算机系年龄小于20岁的学生的学号及年龄的SQL语句如下:
    SELECT Sno,Age FORM Student WHERE SD='CS'AND Age<20;
    
  9. 排序查询

    • ASC表示升序(默认)
    • DESC表示降序
    # 以下语句检索student表的所有男生记录,并以搬好降序排列
    SELECT 学号,姓名,班号
    FROM student
    WHERE 性别='男'
    ORDER BY 班号 DESC
    
  10. 数据分组
    当 WHERE 子句、GROUP BY 子句、HAVING 子句和聚合函数同时出现在一个查询中时,SELECT 命令的执行顺序如下:
    ① 执行WHERE子句,从表中选取行。
    ② 由GROUP BY对选取的行进行分组。
    ③ 执行聚合函数。
    ④ 执行HAVING子句选取满足条件的分组。

9.4.5 SQL数据更新

9.4.6 表的连接查询

  • 使用JOIN…ON子句创建连接的语法结构:
    SELECT table1.column, table2.column,table3.column
    FROM table1JOIN table2 ON table1 和 table2 的连接条件JOIN table3 ON table2 和 table3 的连接条件
    
    SQL99 采用的这种嵌套结构非常清爽、层次性更强、可读性更强,即使再多的表进行连接也都清晰可见。如果你采用 SQL92,可读性就会大打折扣。
  • 语法说明:
    • 可以使用 ON 子句指定额外的连接条件
    • 这个连接条件是与其它条件分开的。
    • ON 子句使语句具有更高的易读性
    • 关键字 JOIN、INNER JOIN、CROSS JOIN 的含义是一样的,都表示内连接
9.4.6.1 内连接(INNER JOIN)的实现
  • 语法:
    SELECT 字段列表
    FROM A表 INNER JOIN B表
    ON 关联条件
    WHERE 等其他子句;
    

题目:

SELECT e.employee_id, e.last_name, e.department_id,d.department_id, d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id);
9.4.6.2 外连接(OUTER JOIN)的实现
9.4.6.2.1 左外连接(LEFT OUTER JOIN)
  • 语法:
#实现查询结果是A
SELECT 字段列表
FROM A表 LEFT JOIN B表
ON 关联条件
WHERE 等其他子句;
  • 举例:
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id)
9.4.6.2.2 右外连接(RIGHT OUTER JOIN)
  • 语法:
#实现查询结果是B
SELECT 字段列表
FROM A表 RIGHT JOIN B表
ON 关联条件
WHERE 等其他子句;
  • 举例:
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) ;

需要注意的是,LEFT JOIN 和 RIGHT JOIN 只存在于 SQL99 及以后的标准中,在 SQL92 中不存在,s只能用 (+) 表示。

9.4.6.3 满外连接(FULL OUTER JOIN)
  • 满外连接的结果 = 左右表匹配的数据 + 左表没有匹配到的数据 + 右表没有匹配到的数据。
  • SQL99是支持满外连接的。使用FULL JOIN 或 FULL OUTER JOIN来实现。
  • 需要注意的是,MySQL不支持FULL JOIN,但是可以用 LEFT JOIN UNION RIGHT join代替。
9.4.6.3 代码实现

在这里插入图片描述

  • 中图:内连接 A∩B
SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;
  • 左上图:左外连接
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;
  • 右上图:右外连接
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;
  • 左中图:A - A∩B
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
  • 右中图:B-A∩B
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL
  • 左下图:满外连接
    左中图 + 右上图 A∪B
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #没有去重操作,效率高
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;
  • 右下图
    左中图 + 右中图 A ∪B- A∩B 或者 (A - A∩B) ∪ (B - A∩B)
SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL
9.4.6.4 语法格式小结
  • 左中图
#实现A - A∩B
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;
  • 右中图
#实现B - A∩B
select 字段列表
from A表 right join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;
  • 左下图
#实现查询结果是A∪B
#用左外的A,union 右外的B
select 字段列表
from A表 left join B表
on 关联条件
where 等其他子句
union
select 字段列表
from A表 right join B表
on 关联条件
where 等其他子句;
  • 右下图
#实现A∪B - A∩B 或 (A - A∩B) ∪ (B - A∩B)
#使用左外的 (A - A∩B) union 右外的(B - A∩B)
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句
union
select 字段列表
from A表 right join B表
on 关联条件
where 从表关联字段 is null and 等其他子句
9.4.6.5 自然连接

SQL99 在 SQL92 的基础上提供了一些特殊语法,比如 NATURAL JOIN 用来表示自然连接。我们可以把自然连接理解为 SQL92 中的等值连接。它会帮你自动查询两张连接表中 所有相同的字段 ,然后进行 等值连接 。
在SQL92标准中:

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`
AND e.`manager_id` = d.`manager_id`;

在 SQL99 中你可以写成:

SELECT employee_id,last_name,department_name
FROM employees e NATURAL JOIN departments d;

9.4.7 子查询

分类方式1
我们按内查询的结果返回一条还是多条记录,将子查询分为单行子查询多行子查询
分类方式2
我们按内查询是否被执行多次,将子查询划分为相关(或关联)子查询不相关(或非关联)子查询

子查询从数据表中查询了数据结果,如果这个数据结果只执行一次,然后这个数据结果作为主查询的条件进行执行,那么这样的子查询叫做不相关子查询。

同样,如果子查询需要执行多次,即采用循环的方式,先从外部查询开始,每次都传入子查询进行查询,然后再将结果反馈给外部,这种嵌套的执行方式就称为相关子查询。

9.4.7.1 单行子查询
  • 单行比较操作符
操作符含义
=equal to
>greater than
>=greater than or equal to
<less than
<=less than or equal to
<>not equal to
9.4.7.2 代码示例

题目:查询工资大于149号员工工资的员工的信息
在这里插入图片描述

题目:返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id和工资

SELECT last_name, job_id, salary
FROM employees
WHERE job_id =
(SELECT job_id
FROM employees
WHERE employee_id = 141)
AND salary >
(SELECT salary
FROM employees
WHERE employee_id = 143);

题目:返回公司工资最少的员工的last_name,job_id和salary

SELECT last_name, job_id, salary
FROM employees
WHERE salary =
(SELECT MIN(salary)
FROM employees);

题目:查询与141号或174号员工的manager_id和department_id相同的其他员工的employee_id,manager_id,department_id

实现方式1:不成对比较

SELECT employee_id, manager_id, department_id
FROM employees
WHERE manager_id IN
(SELECT manager_id
FROM employees
WHERE employee_id IN (174,141))
AND department_id IN
(SELECT department_id
FROM employees
WHERE employee_id IN (174,141))
AND employee_id NOT IN(174,141);

实现方式2:成对比较

SELECT employee_id, manager_id, department_id
FROM employees
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE employee_id IN (141,174))
AND employee_id NOT IN (141,174);
9.4.7.3 多行子查询
  • 也称为集合比较子查询
  • 内查询返回多行
  • 使用多行比较操作符
操作符含义
IN等于列表中的任意一个
ANY需要和单行比较操作符一起使用,和子查询返回的某一个值比较
ALL需要和单行比较操作符一起使用,和子查询返回的所有值比较
SOME实际上是ANY的别名,作用相同,一般常使用ANY
9.4.7.4 代码示例

题目:返回其它job_id中比job_id为‘IT_PROG’部门任一工资低的员工的员工号、姓名、job_id 以及salary
图9-3-2 代码演示

题目:返回其它job_id中比job_id为‘IT_PROG’部门所有工资都低的员工的员工号、姓名、job_id以及salary

图 9-4-2 代码演示

9.4.7.5 相关子查询

如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为关联子查询

相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询。

图9-4-1 相关子查询执行流程

说明:子查询中使用主查询中的列

9.4.7.6 EXISTS 与 NOT EXISTS关键字
  • 关联子查询通常也会和 EXISTS操作符一起来使用,用来检查在子查询中是否存在满足条件的行。
  • 如果在子查询中不存在满足条件的行:
    • 条件返回 FALSE
    • 继续在子查询中查找
  • 如果在子查询中存在满足条件的行:
    • 不在子查询中继续查找
    • 条件返回 TRUE
  • NOT EXISTS关键字表示如果不存在某种条件,则返回TRUE,否则返回FALSE。

题目:查询公司管理者的employee_id,last_name,job_id,department_id信息

SELECT employee_id, last_name, job_id, department_id
FROM employees e1
WHERE EXISTS ( SELECT *
FROM employees e2
WHERE e2.manager_id = e1.employee_id);

9.4.8 SQL访问控制

  1. 授予权限
    合理的权限设置可以保护数据库的安全。使用GRANT语句可以授予已有用户权限。

    GRANT 权限1(字段列表1)[,权限2 (字段列表2)] ON [目标]{表名|*| *.*|数据库名.*} TO 用户名1 [用户名2...][ WITH GRANT OPTION]
    

    (1)权限:指定权限名称,如INSERT、DELETE等,不同的对象可授予的权限不同。
    (2)字段列表:指定权限作用于哪些字段上,字段之间用英文逗号隔开。不指定的情况下,默认为所有字段。
    (3)ON子句:指定权限作用的对象范围。
    (4)目标:可以是TABLE、FUNCTION或PROCEDURE。
    (5)表名:表示权限作用于指定的数据表。
    (6)*.*:表示权限作用于所有数据库和所有数据表。
    (7)*:如果未指定当前数据库,则其含义与*.*相同,否则权限作用于当前数据库中的所有数据表。
    (8)数据库名.*:表示权限作用于指定数据库中的所有数据表。
    (9)TO子句:指定要授予权限的一个或多个用户。
    (10)WITH GRANT OPTION:含义是可以将自己的权限授予其他用户。

    【例10-6】使用GRANT语句将数据库scoredb中学生表student的SELECT权限,以及姓名sname和性别sex字段的UPDATE权限授予用户test2。

    GRANT SELECT,UPDATE(sname,sex)ON scoredb.student TO test2@localhost;
    
  2. 查看权限

    SHOW GRANTS FOR 用户名;
    
  3. 转移权限WITH GRANT OPTION

  4. 收回权限
    收回用户的所有权限

    REVOKE ALL PRIVILEGES,GRANT OPTION 
    FROM用户1[,用户2];
    

9.5 关系数据库的规范化

9.5.1 函数依赖

  1. 函数依赖
    设R(U)是属性U上的关系模式,X、Y是U的子集,若对R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定YY函数依赖于X,记作X→Y
  2. 非平凡的函数依赖
    X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。
  3. 平凡的函数依赖,X→Y,但Y包含于X,则X→Y是平凡的依赖函数
  4. 完全函数依赖
  5. 部分函数依赖
  6. 传递依赖
    X→Y,Y不包含于X,Y→Z,则称Z对X传递依赖

  7. 设K为R(U,F)中属性的组合,若K→U,且对于K的任何一个真子集K’都有K’不能决定U,则K为R的候选码。若有多个候选码,则选一个作为主码。候选码通常也称为候选关键字。
  8. 主属性和非主属性
  9. 外码
  10. 函数依赖的公理系统(Armstrong公理系统)。设关系模式R(U,F),其中U为属性集,F是U上的一组函数依赖,那么有以下推理规则。
    ● A1自反律:若Y包含于X包含于U,则X→Y为F所蕴涵。
    ● A2增广律:若X→Y为F所蕴涵,且ZcU,则XZ→YZ为F所蕴涵。
    ● A3传递律:若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵。
    根据上述3条推理规则又可推出下述3条推理规则。
    合并规则:若X→Y,X→Z,则X→YZ为F所蕴涵。
    伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴涵。
    分解规则:若X→Y,Z包含于Y,则X→Z为F所蕴涵。

9.5.2 规范化

  1. 1NF(第一范式)列不可分(消除可分数据项)
    定义:若关系模式尺的每一个分量是不可再分的数据项,则关系模式R属于第一范式。
    例如,供应者和它所提供的零件信息,关系模式 FIRST 和函数依赖集下如下:

    FIRST(Sno,Sname,Status,City,Qty)
    F={Sno->Sname,Sno->Status,Status->City,(Sno,Pno)->Qty}
    

    若具体的关系如表9-8所示。从表9-8可以看出,每个分量都是不可再分的数据项,所以是1NF的。但是,1NF存在以下4个问题(P510教程书)

    • 冗余度大
    • 引起修改操作的不一致性
    • 插入异常
    • 删除异常
  2. 2NF(第二范式)主键依赖(消除部分依赖)
    定义:若关系模式R∈1NF,且每一个非属性完全依赖于候选码,则关系模式R∈2NF。
    换句话说,当1NF消除了非主属性对码的部分函数依赖,则称为2NF。

  3. 3NF(第三范式)表不可分(消除传递依赖)

    若关系模式R(U,F)中若不存在这样的码X,属性组Y及非主属性Z(Z⊈Y)使得X→Y(Y-/>X),Y→Z成立(可以推出X→Z),则关系模式R∈3NF。
    即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。

  4. BC范式(BCNF)
    设R是一个关系模式,F是它的依赖集,R属于BCNF,当且仅当其F中每个依赖决定因素必定包含R的某个候选码。
    由BCNF的定义可以得到结论,一个满足BCNF的关系模式有:

    • 所有非主属性对每一个码都是完全函数依赖。
    • 所有的主属性对每一个不包含它的码,也是完全函数依赖。
    • 没有任何属性完全函数依赖于非码的任何一组属性。
      一个满足BCNF的关系模式R已消除了插入和删除异常。
  5. 多值依赖和第四范式(4NF)

    1. 多值依赖
      图9-18多值依赖

    2. 4NF

      定义23:设有一关系模式R<U,F>是 INF,如果对于R的每个非平凡多值依赖X→→Y(Y⊈X),X都包含了R的一个候选码,则称R是第四范式,记为 4NF。
      例如,前面例子中,课程→→任课教师,课程→→参考书都是非平凡多值依赖,而课程不是码,所以表5.2的关系模式不属于 4NF。

9.5.2【技巧总结】

图9-19 规范化步骤

伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴含

第二范式和第三范式区别

第二范式是指:全部的非主键列依赖于全部主键(优化只发生在以联合主键作为主键的表)

图9-5-2 第二范式

第三范式是指:非主键列必须直接依赖于主键,不能存在传递依赖(优化发生在以单主键或联合主键为主键的表,只是非主属性间存在依赖)

图9-5-2 第三范式

9.5.2.1 判断部分函数依赖技巧

非主属性完全依赖候选码,当1NF消除了非主属性对码的部分函数依赖
只需要判断满足第一范式的情况下,是否存在部分依赖

某销售公司数据库的零件关系P(零件号,零件名称,供应商,供应商所在地,库存量),函数依赖集
F={ 零件号 → 零件名称,(零件号,供应商) → 库存量, 供应商 → 供应商所在地}①主属性  非主属性     ②主属性     非主属性   ③主属性   非主属性
①中的主属性是②主属性的一部分,所以①是部分依赖
②的非主属性完全依赖于主属性组,所以②是完全依赖
③的主属性是②主属性组的一部分,所以③是部分依赖
存在部分依赖,不存在完全依赖候选码,因此不满足第二范式
9.5.2.2 判断传递函数依赖技巧

第三范式是指:非主键列必须直接依赖于主键,不能存在传递依赖
在满足第二范式的情况下,判断非主属性是否有传递依赖,可利用伪传递率

伪传递率:若X→Y,WY→Z,则XW→Z为F所蕴含
设有关系模式R(课程,教师,学生,成绩,时间,教室),其中函数依赖集F 如下:
F={课程 → 教师,(学生,课程)→ 成绩,(时间,教室)→ 课程,(时间,教师)→ 教室,
(时间,学生)→ 教室}                  W    Y   → ZX     → Y
(时间,学生)→教室,(时间,教室)→ 课程,(时间)(时间,学生)→课程,课程→教师
(时间,学生) -> 课程 -> 教师 ,存在传递依赖,因此不满足第三范式

9.5.3 模式分解及分解应具有的特性

  1. 分解
  2. 无损连接
    无损连接性指的是对关系模式分解时,原关系模式下任一合法的关系实例在分解之后应能通过自然连接运算恢复起来。
  3. 保持函数依赖
    一个无损连接分解不一定具有依赖保持性;同样,一个依赖保持性分解不一定具有无损连接性。
  • 判断是否有损连接
    • R分解为ρ集合中的选项进行自然连接
    • 自然连接后=关系模式R的所有子集,就是自然连接,反之则有损连接
    • 例如:
      关系模式R(A1,A2,A3,A4)上的函数依赖集F{A1A3->A2,A2->A3}.
      若将R分解为ρ={(A1,A2),(A1,A3)}
      将(A1,A2)自然连接(A1,A3),得出的是A1,A2,A3,得不出A1,A2,A3,A4,所以是有损连接
      
  • 判断是否保持函数依赖
    • R分解为ρ={(A1,A2),(A1,A3)}能否推出依赖集F{A1A3->A2,A2->A3}
    • 能就是保持依赖,不能就是不保持依赖,这里(A1,A2)不在依赖集中,不能保持A1A3推出A2

9.6 数据库的控制功能

9.6.1 事务管理

事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(1solation)和持久性(Durability)。这4个特性也称事务的 ACID 性质。
(1)原子性。事务是原子的,要么都做,要么都不做。
(2)一致性。事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态。因此,当数据库只包含成功事务提交的结果时,称数据库处于一致性状态。
(3)隔离性。事务相互隔离。当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
(4)持久性。一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将永久有效。

9.6.2 数据库的备份与恢复

  1. 故障类型
  2. 备份方法
    恢复的基本原理是“建立数据冗余”(重复存储)。建立冗余数据的方法是进行数据转储和登记日志文件。数据的转储分为静态转储和动态转储、海量转储和增量转储、日志文件。
    (1)静态转储和动态转储。静态转储是指在转储期间不允许对数据库进行任何存取、修改操作:动态转储是在转储期间允许对数据库进行存取、修改操作。因此,转储和用户事务可并发执行。
    (2)海量转储和增量转储。海量转储是指每次转储全部数据;增量转储是指每次只转储上次转储后更新过的数据。
    (3)日志文件。在事务处理的过程中,DBMS 把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。一旦发生故障,DBMS 的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。因此,DBMS 利用日志文件来进行事务故障恢复和系统故障恢复,并可协助后备副本进行介质故障恢复。
  3. 恢复
    事务恢复有以下3个步骤。
    (1)反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作。
    (2)对事务的更新操作执行逆操作。
    (3)继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。
  4. 数据库镜像

9.6.3 并发控制

  1. 并发操作带来的问题
  2. 并发控制技术
    1. 封锁
      (1)排它锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他事务都不能再对A加任何类型的锁,直到T释放A上的锁。
      (2)共享锁。若事务T对数据对象A加上S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加S锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A进行任何修改。

分布式数据库(熟记)在9.1.4里面

分片透明:指用户或应用程序不需要知道逻辑上访问的表具体是怎么分块存储的
复制透明:指采用复制技术的分布方法,用户不需要知道数据是复制到哪些节点,如何复制的。
位置透明:指用户无须知道数据存放的物理位置
逻辑透明:指用户或应用程序无需知道局部场地使用的是哪种数据模型

共享性:指数据存储在不同的结点数据共享
自治性:指每结点对本地数据都能独立管理
可用性:指当某一场地故障时,系统可以使用其他场地上的副本而不至于使整个系统瘫痪
分布性:指数据在不同场地上的存储


结语

这份笔记由我在备考软件设计师中级考试的过程中编写,包含了我对知识点的理解与总结。如果您觉得这份笔记对您有帮助,并希望分享给更多的人,我十分乐意。但请在转载时务必注明出处,以尊重作者的劳动成果,感谢您的理解与支持

在此特别强调,本人编写笔记的所需部分资源均源于网络公开资源,旨在为大家提供一个学习和交流的内容,未经原作者授权,如若不慎侵犯您的合法权益,请您立即通过有效联系方式通知我,并附上相关证明材料。一旦核实无误,我将在第一时间删除涉事资源,全力保障您的合法权利不受损害。


  • 每篇一句:“变好的过程都不太舒服 试试再努力点”
  • 如果觉得对您有用,请点个赞或者收藏鼓励我持续更新吧!
  • 恭喜您,已挑战成功第九关上,请前往第十关进行挑战吧【整理中……】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com