01. 数据库概述


一、数据库的相关概念

  • DB:数据库(Database)
    • 即存储数据的“仓库”,其本质是一个文件系统。它保存了一系列有组织的数据。
  • DBMS:数据库管理系统(Database Management System)
    • 是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制。用户通过数据库管理系统访问数据库中表内的数据。
  • SLQ:结构化查询语言(Structured Query Language)
    • 专门用于与数据库通信的语言

二、数据库与数据库管理系统的关系

??数据库管理系统(DDMS)可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体用户的数据

三、RDBMS与非RDBMS

3.1、关系型数据库(RDBMS)

??关系型的数据库是最古老的人数据库类型,它是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。关系型数据库以行(row)和列(column)的形式存储数据。这一系列的行和列被称为表(table),一组表组成了一个库(database)。表于表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系型数据库,即使建立在关系模型基础上的数据库。关系型数据库可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询,同时它还支持事物支持,是的对于安全性能很高的数据访问要求得以实现。

3.2、非关系型数据库(非RDBMS)

??非关系型数据库,可以看成传统关系型数据库的功能阉割版本,基于键值对存储数据,不需要经过SQL层的解析,性能非常高。同时,通过减少不常用的功能,进一步提高性能。

3.2.1、键值型数据库

??键值型数据库通过Key-Value键值的方式来存储数据,其中Key和Value可以是简单的对象,也可以是复杂的对象。Key作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤,如果你不知道去哪里找数据,就要遍历所有的键,这会消耗大量的计算。键值型数据库典型的使用场景是作为内存缓存。Redis是最流行的键值型数据库。

3.2.2、文档型数据库

??此类数据库可以存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB是最流行的文档型数据库。此外还有CouchDB等。

3.2.3、搜索引擎数据库

??虽然关系型数据库采用了索引提升检索效率,但是针对全文索效率却较低。搜索引擎数据库是应用在搜索引擎领域的数据存储格式。由于搜索引擎会爬取大量的人数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。典型产品:Solr、Elasticsearch、Splunk等。

3.2.4、列式数据库

??列式数据库式相对于行式数据库,Oracle、MySQL、SQL Server等数据库都是采用行式存储(Rowbased),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的I/O,适合于分布式文件系统,不足在于功能相对优先。典型产品:HBase等。

3.2.5、图形数据库

??图形数据库,利用了图这种数据结构存储了实体(对象)之间的关系。数据模型主要是以节点的边(关系)来实现,特点在于能高效的解决复杂的关系问题。图形数据库,就是一种存储图形关系的数据库。它利用图这种数据结构存储了实体(对象)之间的关系。关系型数据用于存储明确关系的数据,但对于复杂关系的数据存储却有些力不从心。典型产品:Neo4J、InfoGrid等。

四、关系型数据库的设计规则

  • 关系型数据库的典型结构就是数据表,这些数据表的组成都是结构化的(Structed)。
  • 将数据放到表中,表再放到库中,
  • 一个数据库中可以有多个表,每个表都有一个名字,用来表示自己。表明具有唯一性。
  • 表具有一些特性,这些特性定义了数据在表中如何存储。

4.1、表、记录、字段

  • E-R(entity-relationship,实体-联系)模型中有三个主要概念:实体集、属性、联系集
  • 一个实体集(class)对应于数据库中的一个表(table),一个实体(instance)则对应于数据库表中一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据库中的一列(column),也称为一个字段(field)。

4.2、表的关联关系

  • 表于表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
  • 一对一关系(one-to-one)
    • 拆分为两个表:两个表的记录是一一对应关系。
    • 两种建表原则:
      • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一。
      • 外键是主键:主表的主键和从表的主键,形成主外键关系
  • 一对多关系(one-to-many)
    • 一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键
  • 多对多关系(many-to-many)
    • 要表示多对多关系,必须创建第三个表,该表通常称为联系表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。
  • 自我引用(self reference)

五、SQL的分类

  • DDL(Data Definition Languages、数据定义语言),这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构
    • 主要的关键字包括create、drop、alter、rename、truncate等
  • DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据的完整性。
    • 主要的语句关键字包括insert、delete、update、select等
      • 因为查询语句使用的非常频繁,所以它也被称为DQL(数据查询语言)
  • DCL(Data Control Language、数据控制语言)。用于定义数据库、表、字段、用户的访问权限和安全级别
    • 主要的语句关键字包括grant、revoke、commit、rollback、savepoint等
      • 其中commit、rollback被称为TCL(Transaction Control Language,事物控制语言)

六、SQL语言的规则和规范

基本规则

  • SQL可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
  • 每条命令以;或\g或\G结束
  • 关键字不能被缩写也不能分行
  • 关于标点符号
    • 必须保证所有()、单引号、双引号是成对结束的
    • 必须使用英文状态下的半角输入方式
    • 字符串型和日期时间类型的数据可以使用单引号('')表示
    • 列的别名,尽量使用双引号(""),而且不建议省略as

SQL大小写规范

  • 数据库名、表名、表别名、字段名等建议小写
  • SQL关键字、函数名、绑定变量等建议大写

注释

  • 单行注释:--
    • MySQL特有的方式:#
  • 多行注释:/* */

命名规则

  • 数据库、表名不得超过30个字符,变量名限制为29个
  • 必须只能包含AZ,az,0~9,_共63个字符
  • 数据库名、表明、字段名等对象名中间不要包含空格
  • 同一个数据库管理软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名;
  • 必须保证自定义的字段名、表名没有和关键字、保留字、数据库系统或常用方法冲突。
    • 如果坚持使用,请在SQL语句中使用`(着重号)引起来
  • 保持字段名和类型的一致性

导入现有的数据表、表的数据:source 文件的全路径名(命令行执行)