MySQL1 数据库概述

84 阅读7分钟

1. 数据库概述

目录

1. 为什么要使用数据库

在传统情况下我们程序的计算结果往往是保存在内存中的,假如程序出现故障或者设备突然断电,就会导致数据丢失,为了解决这些问题,我们通常会把数据保存在可掉电的设备中,比如磁盘文件,数据库等等。

但是假如我们将数据存储在文件中,那么对于大量的数据检索相对很慢。而数据库可以存储大量的数据,带有索引便于快速检索,且支持多种不同的数据类型。

2. 数据库与数据库管理系统

2.1. 数据库相关概念

数据库(Database):存储数据的仓库,本质上是一个文件系统,里边存放了一系列有组织的数据,比如表;

数据库管理系统(Database Manager System):通常指的是数据库软件,数据库是通过数据库软件创建和操纵的;

SQL(Structured Query Language):结构化查询语言,用来对数据库进行操纵的语言;

2.2. 数据库与数据库管理系统的关系

DBMS可以管理多个数据库,一般情况下我们会为不同的应用创建不同的数据库,每一个数据库中又可以包含多个表。DBMS和数据库之间通过SQL语言进行交互。

2.3. 常见的DBMS

关系型数据库:Oracle MySQL SQL Server SQLlite

非关系型数据库:Redis MongoDB

3. 关系型数据库

3.1. 实质

关系型数据库使用二元关系(二维表格形式)存储数据,类似于我们常用的excel表格,关系型数据库以行(row)和列(column)的形式存储数据,一系列的行和列被称为表。

表与表之间的数据记录有关系,如上图所示每个员工都有其所属的部门,每个部门可能有一个对应的部门表,员工表和部门表就通过部门这个关系关联起来,关系型数据库就是建立在关系模型上的数据库。

3.2. 优势

  1. 可以使用SQL语句可以方便的进行一个表或者多个表进行查询;
  2. 支持事务,可以满足安全性能很高的数据访问方法;

4. 非关系型数据库

4.1. 实质

非关系型数据库基于键值对存储数据,不要进行SQL解析,有着非常高的性能。

4.2. 非关系型数据库类型

  1. 键值型数据库:通过key-value存储数据,使用key作为唯一标识符,查询速度非常快,但是无法像关系型数据库一样使用where进行条件过滤,如果想要筛选出特定的元素,我们通常需要遍历所有的键;
  2. 文档型数据库:在该数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。
  3. 搜索引擎数据库:通常采用"倒排索引"来实现,主要用于对大量数据的检索;
  4. 列式数据库:传统的数据库是基于行式的,即存储完一行数据再存储下一行,而列式数据库是按照列存储的,存储完一列数据再存储下一列。假如说我只想查询表中的某些字段的信息,按行存储的方式会将所有字段全部添加进去,就会造成字段的冗余,而按列不会。因此这种情况下按列存储占据的内存更低,能降低系统的IO;
  5. 图形数据库:利用图这种数据结构存储实体之间的关系,比较典型的例子是人与人的社交网络等等,该数据模型主要是以节点和边来实现。

5. 关系数据库的设计规则

  • 关系型数据库通常采用ORM思想实现,每个数据库中都有多个表,每个表有一个名字用来标识自己,表名具有唯一性;
    ORM思想:
      数据库中的一个表 <---> Java中的一个类
      表中的一条数据 <---> 类中的一个对象(或实体)
      表中的一个列 <----> 类中的一个字段、属性(field)
    
    

5.1. 表,记录,字段

E-R(实体-联系)模型中有三个主要的概念:实体集,属性,联系集

  1. 一个实体集对应数据库中的一个表;
  2. 一个实体对应于数据库表中的一行;
  3. 一个属性对应数据库表中的一列;
  4. 联系集指定了两个实体或者实体集的关系。

5.2. 表的关联关系

5.2.1. 一对一

通常用于拆分表的冗余字段,假设对于一个学生表,我们可以将其拆分成两个表分别是学生基础信息,学生档案信息,这两个表是一一对应关系,通常使用两个表的主键作为外键。

5.2.2. 一对多

通常用于一个实体对应多个实体,比如一个用户可以创建多个订单,一个学生可以有多个课程的成绩。通常情况下创建一对多的表时需要在从表(多方)创建一个字段,字段作为外键指向主表一方的主键;

5.2.3. 多对多

想要表示多对多的关系,必须创建第三个表,该表通常作为联结表,它可以将多对多关系划分为两个一对多的关系,比较常用的场景如:权限控制等等。三张表,一个是用户表、一个是角色表,角色表代表了不同的角色有哪些对应的权限、一个是用户对应的角色表。

5.2.4. 自我引用

通常指的是一个表自己引用自己的字段,比较常见的就是员工表,会有一个上级的字段,这个字段会引用其他员工的id。

5.3. 主键

指的是数据库表中其值能唯一区分每一行的列。

表中的任意列均可以作为主键,只要其满足以下两个条件:

  1. 任意两行都不具有相同的主键值;
  2. 每行都必须具有一个主键值,且主键值不为null;

主键并非只能定义在表中的某一列,而可以用表中的多个列共同定义。

6. MySQL主要目录结构

bin目录包含着所有的MySQL的可执行文件
my.ini文件(在安装时设置的数据文件夹中)MySQL的主要配置文件
c:\ProgramData\MySQL\MySQL Server 8.0\data\用户的数据库存放的目录