25.0 MySQL 数据库概述

2023-10-16_00030

1. 数据库介绍

1.1 数据库相关概念

数据库相关概念:
* 1. DB: 数据库(Database), 它是按照一定的数据模型组织, 存储和管理数据的集合(即存储数据的"仓库", 其本质是一个文件系统.).
     数据库可以包含一组相关的数据表, 索引, 视图, 存储过程等.
     数据库可以用于存储和管理各种类型的数据, 例如企业的业务数据, 用户信息, 产品信息等.
         
* 2. DBMS: 数据库管理系统(Database Management System), 它是一种软件系统, 用于创建, 操作和管理数据库.
     它提供了对数据库的访问接口和功能, 使用户能够对数据库中的数据进行增删改查等操作.
     DBMS负责管理数据库的物理存储, 数据安全性, 并发控制, 数据完整性等方面.
     
* 3. SQL: 结构化查询语言(Structured Query Language), 它是一种用于管理关系型数据库的标准化查询语言.
     SQL提供了一系列的语句和命令, 使用户能够定义数据库结构, 插入, 更新和删除数据, 并进行数据查询.
     
DB是数据的集合, DBMS是管理这些数据的软件系统, 而SQL是用于操作和查询数据库的语言.
DBMS通过提供SQL语言的接口, 使用户能够方便地操作数据库中的数据.
使用数据库有以下几个重要的原因:
* 1. 数据的持久化存储: 数据库可以将数据持久地保存在磁盘上, 确保数据在计算机系统关闭或发生故障时不会丢失.
     这样可以保证数据的安全性和可靠性.

* 2. 数据共享和协作: 数据库允许多个用户同时访问和修改同一份数据, 从而实现数据共享和协作.
     不同的应用程序和用户可以通过数据库共享数据, 提高工作效率和信息共享.
   
* 3. 数据一致性和完整性: 数据库提供了强大的数据一致性和完整性机制, 可以确保数据的有效性和合法性.
     通过数据库的事务处理机制, 可以保证数据库中的数据经过一系列操作后始终保持一致性.
     举个例子, 假设我们要同时向数据库中添加一笔转账记录和更新两个账户的余额.
     如果其中任何一项操作失败(比如因为网络故障或程序错误), 那么所有的操作都会被取消, 数据库会回滚到原始状态, 不会有任何改变.
     这样可以保证数据的一致性, 不会出现转账被记录而余额没有更新的情况.
     
* 4. 高效的数据访问和查询: 数据库使用高效的数据索引和查询算法, 可以快速地对数据进行检索和查询. 
     这使得数据的访问速度更快, 提高了数据管理和处理的效率.

* 5. 数据安全和权限管理: 数据库提供了安全性和权限管理的机制, 
     可以对不同用户和应用程序进行不同级别的访问权限控制, 保护数据的安全性和隐私性.

2023-10-09_00021

数据库管理系统提供了一个结构化, 安全, 高效且可靠的数据管理平台, 这个平台为应用程序和用户提供了优质的数据处理和管理功能.
无论是对个人用户还是企业组织, 数据库管理系统的使用都能带来诸多好处.

数据库管理系统可以管理多个数据库, 一般开发人员会针对每一个应用创建一个数据库.
为保存应用中实体的数据, 一般会在数据库创建多个表, 以保存程序中实体用户的数据.
三者的关系示意图:

2023-10-09_00022

1.2 常见数据库管理系统

目前互联网上常见的数据库管理系统有以下几种:
* 1. MySQL: 它是一种开源的关系型数据库管理系统, 它被广泛应用于各种规模的应用和网站.
    它具有良好的性能, 稳定性和可扩展性, 并支持多种操作系统.

* 2. Oracle Database: 它是一种商业级的关系型数据库管理系统, 被广泛用于大型企业级应用.
     它具有强大的功能和性能, 并支持复杂的数据处理需求.

* 3. Microsoft SQL Server: 它是微软公司开发的关系型数据库管理系统, 适用于Windows环境.
     它具有良好的集成性和可靠性, 并提供了广泛的管理工具和开发接口.

* 4. PostgreSQL: 它是一种开源的关系型数据库管理系统, 具有高度的可靠性和可扩展性.
     它支持复杂的数据类型和丰富的功能, 并提供了许多扩展插件.

* 5. MongoDB: 它是一种开源的文档数据库管理系统, 适用于处理非结构化数据. 
     它以灵活的数据模型和高可扩展性而闻名, 被广泛应用于大数据和实时应用.
     
* 6. Redis: 它是一种基于内存的键值存储系统, 它支持多种数据结构, 如字符串, 哈希, 列表, 集合和有序集合等.
     Redis具有极高的读取和写入性能, 并提供了丰富的功能和灵活的数据操作方式.
     它常被用作缓存, 消息队列, 实时计算和分布式锁等场景中.

* 6. SQLite: 是一种轻量级的嵌入式数据库管理系统, 它使用一个单一的文件来存储整个数据库.
     SQLite支持标准的SQL查询语言, 并具有简单易用, 无需独立的服务器进程和高度可靠等特点.
     它常被用于移动应用, 嵌入式系统和简单的小型项目中.

选择哪种数据库管理软件取决于具体的应用需求, 性能要求和预算限制等因素.
数据库管理系统的排名: https://db-engines.com/en/ranking .
它根据多个指标, 包括用户的关注度, 搜索引擎的搜索结果, GitHub上的源代码活跃度等, 对各种数据库管理系统进行排名和评估.

2023-10-09_00023

对应的走势图: https://db-engines.com/en/ranking_trend .

2023-10-09_00024

2. 数据库类型

数据库类型: 是指在数据库管理系统中使用的不同类型的数据库模型或架构.

最常见的两种数据库类型:
* 1. 关系型数据库(RDBMS): 关系型数据库使用表格来存储和组织数据, 使用结构化查询语言(SQL)进行数据操作和查询.
     其中最常见的关系型数据库是Oracle数据库, MySQL, Microsoft SQL Server和PostgreSQL等.

* 2. 非关系型数据库(NoSQL): 非关系型数据库不使用传统的表格结构, 而是使用其他数据模型来存储和组织数据.
     非关系型数据库适用于处理大量的非结构化和半结构化数据.
     常见的非关系型数据库包括MongoDB, Cassandra和Redis等.
     
从数据库排名中可以看出, 关系型数据库绝对是DBMS的主流, 其中使用最多的DBMS分别是Oracle, MySQL和SQL Server.

2.1 关系型数据库

2.1.1 关系型数据库介绍
关系型数据库(Relational Database): 是一种使用表格来组织和存储数据的数据库类型.
在关系型数据库中, 数据以行和列的形式组织, 并使用主键和外键来建立不同表之间的关系.

关系型数据库具有以下特点:
* 1. 结构化: 关系型数据库的数据以表格的形式存储, 每个表格包含行和列, 行代表数据记录, 列代表数据属性.
     这种结构化存储方式使得数据的组织和访问变得非常直观和易于理解.

* 2. 行与列之间存在关联: 在关系型数据库中, 行和列是表格的基本元素.
     每列为数据的属性(每列属性的类型相同), 每列组成的行为一个数据记录.
     通过行和列的关联, 可以将不同的数据记录和属性进行关联和整合, 从而建立更复杂的数据关系和查询操作.
	 这种关联关系是关系型数据库的核心特性之一, 使得数据的查询和管理更加高效和便捷.

* 3. 行和行之间存在一种独特的关联关系: 关系型数据库通过使用键值对不同表之间的数据进行关联, 从而建立表与表之间的关系.
     例如, 一个表的主键可以作为另一个表的外键, 以次建立两个表之间的关联关系.

* 4. 结构化查询语言(SQL): 关系型数据库使用结构化查询语言(SQL)进行数据查询和操作.
     SQL是一种标准化的语言, 使用它可以对数据库执行各种操作, 如查询数据, 插入数据, 更新数据和删除数据等.

* 5. 数据完整性和一致性: 关系型数据库提供了数据完整性和一致性的机制, 通过定义约束和规则来确保数据的有效性和合法性.
     例如, 可以定义主键约束, 唯一约束和外键约束等.

* 6. ACID事务支持: 关系型数据库支持ACID(原子性, 一致性, 隔离性和持久性)事务, 确保对数据库的操作是可靠, 一致和可恢复的.

* 7. 容易理解和维护: 关系型数据库具有良好的结构和规范化的数据模型, 易于理解和维护.
     通过使用标准化的表格结构, 可以降低数据冗余和数据不一致的风险.    
2.1.2 核心概念
关系型数据库模型中的核心概念:
* 1. 实体集(Entity Set): 实体集通常对应于数据库中的表(Table), 每个表包含多个记录行与属性列.

* 2. 实体(Entity): 表中的一条记录行(Row)对应一个实体. 

* 3. 属性(Attribute): 属性对应于表中的列(Column).
     每列定义了表中实体的一个属性, 用于描述实体的某个特征.

* 4. 主键(Primary Key): 表中的每个实体的唯一标识, 主键可以是单个列或一组列.
     主键值具有唯一性和非空性, 用于确保数据的唯一性, 可以增加数据访问的快速性.

* 5. 外键(Foreign Key): 外键是用于建立表与表之间关联关系的列, 可以是单个列或一组列.
    外键与另一个表的主键值相对应, 用于维护数据间的引用完整性.
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式).

202310102258733

这一系列的行和列被称为表(table), 一组表组成了一个库(database).

image-20231010014428128

2.1.3 表关系
现实世界中的各种实体以及实体之间的各种联系均可以使用关系模型来表示.
关系型数据库是建立在关系模型基础上的数据库, 表与表之间的数据记录存在着关系(relationship).
常见的四种关系模型包括: 一对一关联, 一对多关联, 多对多关联和自我引用.
2.1.3.1 一对一关联
一对一关联(one-to-one): 两个实体之间拥有唯一的关联关系.
这种关联关系通常用于确保数据的完整性和唯一性.

举例: 一个学生表的字段为: 学号, 姓名, 手机号码, 班级, 系别, 身份证号码, 家庭住址, 籍贯, 紧急联系人, ...

一个表过于庞大不利于维护, 可以将学生表拆分为两个表, 两个表的记录是一一对应的关系(一个学生对应一个档案信息).
* 1. 基础信息表(常用信息): 学号, 姓名, 手机号码, 班级, 系别.
* 2. 档案信息表(不常用信息): 学号, 身份证号码, 家庭住址, 籍贯, 紧急联系人.
其中每个表中的记录都与另一个表中的唯一一条记录相关联.

将表拆分的好处: 数据查询性能优化.
将不常用的学生附加信息存储在独立的表格中, 可以提高数据库的查询性能.
当只查询常用信息时, 不需要访问档案信息表, 减少了不必要的IO操作和计算, 从而提升了查询效率.
: 如果只需获取学生的基本信息列表, 如学号, 姓名, 手机号码, 班级和系别, 而不需要身份证号码, 家庭住址, 籍贯, 紧急联系人的信息.

一对一建表原则:
* 主键唯一性原则: 所有表的主键必须是唯一的.
* 外键关联原则: 当两个表之间存在一对一关系时, 从表的主键作为主表的外键, 建立主从关系.

image-20231011001913545

2.1.3.2 一对多关联
一对多关联(one-to-many): 一个实体与多个相关实体之间存在关联关系.
在这种关联中, 一个实体(主实体)与另一个表中的多个记录(从实体)相关联.

举例: 一个员工表的字段为: 编号, 姓名, 性别, 年龄,  部分编号, 部门名称, 部门简介...

可以将员工表拆分为两个表, 两个表的记录是一对多应关系(一个部门可以有多个员工).
* 1. 员工表: 编号, 姓名, 年龄.
* 2. 部门表: 编号, 名称, 简介.
其中一张表(部门表)中的记录可以与其他表中(员工表)的多个记录相关联.

拆分的好处: 可以节省内存的使用.
在内存中, 部门表的记录只需存储一次, 而多个员工可以共享这一部门记录.
这种共享和复用的机制使得内存中的部门信息得到最大程度的利用, 减少了重复存储相同数据的需求, 节省了内存空间.

一对多建表原则: 
* 在从表(多方)创建一个字段, 字段作为外键指向主表(一方)的主键.
在一对多关系中, "一"端是指关系中拥有唯一标识的实体, "多"端是指关系中具有多个对应关系的实体.
在我们之前的示例中, 部门表是"一", 而员工表是"多".

具体来说, 每个部门可以有多个员工, 但每个员工只属于一个部门.
因此, 部门表是"一", 员工表是"多".
部门表中的部门编号字段作为主键, 而员工表中的部门编号字段作为外键, 连接到部门表的主键上, 建立起一对多关系.

一对多关系中的"一"的一方通常被称为主表(主表), "多"的一方则被称为从表(从表).

image-20231011001935354

2.1.3.3 多对多关联
多对多关联(many-to-many): 两个表中的实体之间存在多对多的关联关系.
 
举例, 一个学生表的字段为: 编号, 姓名, 年龄, 课程名称, 授课教师.

可以将学生表拆分为两个表, 并使用一个关联表连接两张表.
* 1. 学生表.
* 2. 关联表(第三张表).
* 3. 课程表.
多对多关联通常通过一个关联表(第三张表)来实现, 此表包含两个实体集的主键作为外键.
关联表不需要自已的主键, 而是通过相关表的主键进行组合, 我们一般称为多主键.

拆分的好处: 减少数据的冗余.
通过拆分, 可以避免在学生表中重复存储相同的课程信息和教师信息.
学生表中只需要存储学生的编号, 姓名和年龄等基本信息, 而课程名称和授课教师相关的信息则在关联表中进行存储.

多对多关系建表原则: 
* 需要创建第三张表, 中间表中至少两个字段, 这两个字段分别作为外键指向各自一方的主键.
一个"学生"实体和一个"课程"实体之间可以有多对多的关联, 一个学生可以选择多个课程, 一个课程可以有多个学生.

image-20231011014319510

2.1.3.4 自我引用
自我引用(Self reference): 自我引用表示实体与同一实体之间的关系.
在数据库中, 一个表中的记录可以与表中其他记录建立关联.
例如, 一个"员工"实体可以与另一个"员工"实体建立上下级关系, 一个员工可以作为另一个员工的上级或下级.

202310110157420

2.1.4 关系型数据库的优劣

关系型数据库的优势:
* 1. 结构化数据: 关系型数据库使用表格来存储和组织数据, 具有明确定义的结构.
     这使得数据模型易于理解和管理, 且保证数据的一致性和完整性.

* 2. 灵活查询: 基于关系模型的查询语言(如SQL)可以执行复杂的查询操作, 例如联结(JOIN), 聚合和排序等.
     这使得用户可以方便地检索和分析数据, 满足各种查询需求.

* 3. 数据一致性: 关系型数据库支持事务处理, 可以确保数据的一致性和完整性.
     在多个操作同时进行时, 通过ACID(原子性, 一致性, 隔离性和持久性)事务特性, 可以保证数据在数据库中的正确性.

* 4. 数据安全性: 关系型数据库提供了权限控制机制和访问控制, 可以限制用户对数据的访问权限, 提高数据的安全性.

关系型数据库的劣势:
* 1. 扩展性: 关系型数据库通常对横向扩展(水平扩展)的支持相对较弱, 对大规模数据和高请求负载的情况可能存在性能限制.
     虽然可以通过主从复制或分区等技术来提高性能和扩展性, 但仍然存在一定限制.

* 2. 复杂性: 关系型数据库的设计和管理需要具备一定的技术知识和经验.
     表间的关系设计, 模式规范等方面需要细致考虑, 且需要定期进行维护和优化.

* 3. 适用性: 关系型数据库更适合于结构化的数据, 对于非结构化和半结构化数据(如文本, 图像, 视频)的存储和查询能力有限.

关系型数据库适用于较为结构化的数据和复杂查询需求, 但对于非结构化数据和大规模数据的处理可能不是最佳选择.
在实际应用中, 根据具体需求和情况, 也可以选择使用非关系型数据库(NoSQL)等其他类型的数据库系统.

2.2 非关系型数据库

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

非关系型数据库在英语中的常用术语是NoSQL(Not Only SQL).
这个术语用于指代与传统关系型数据库(Relational Database)不同的数据库管理系统, 强调非关系型数据库的特点和优势.
所以, 可以简单地将非关系型数据库称为NoSQL数据库.
NoSQL一词将: 键值型数据库, 文档型数据库, 搜索引擎和列存储等, 图形数据库等, 技术囊括在内.
2.2.1 键值型数据库
键值型数据库通过Key-Value键值的方式来存储数据, 其中Key和Value可以是简单的对象, 也可以是复杂的对象.
Key作为唯一的标识符, 优点是查找速度快, 在这方面明显优于关系型数据库, 
缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),
如果你不知道去哪里找数据, 就要遍历所有的键, 这就会消耗大量的计算.
键值型数据库典型的使用场景是作为'内存缓存'.
Redis是最流行的键值型数据库.

image-20231010133938744

2.2.3 文档型数据库
此类数据库可存放并获取文档, 可以是XML, JSON等格式.
在数据库中文档作为处理信息的基本单位, 一个文档就相当于一条记录.
文档数据库所存放的文档, 就相当于键值数据库所存放的'值'.
MongoDB是最流行的文档型数据库. 此外, 还有CouchDB等.
2.2.4 搜索引擎数据库
虽然关系型数据库采用了索引提升检索效率, 但是针对全文索引效率却较低.
搜索引擎数据库是应用在搜索引擎领域的数据存储形式, 由于搜索引擎会爬取大量的数据,
并以特定的格式进行存储这样在检索的时候才能保证性能最优.
核心原理是"倒排索引".
典型产品: Solr, Elasticsearch, Splunk等.
2.2.5 列式数据库
列式数据库是相对于行式存储的数据库, Oracle, MySQL, SQL Server等数据库都是采用的行式存储(Row-based),
而列式数据库是将数据按照列存储到数据库中, 这样做的好处是可以大量降低系统的I/O, 适合于分布式文件系统, 不足在于功能相对有限.
典型产品: HBase等.

image-20231010144450236

相比传统的行式数据库, 列式数据库有许多优势, 其中之一就是可以大幅度降低系统的I/O:
列式数据库将同一列中的数据存储在一起, 这样可以提供更高的数据压缩率, 并且只读取查询所需的列数据.
而在行式数据库中, 需要同时读取整行数据, 无论查询需要的是列数据还是行数据, 都需要从磁盘中读取整个行记录, 这就导致了较高的I/O开销.

通过将数据按列存储, 列式数据库可以减少磁盘读取需求, 从而大幅降低了I/O操作.
这在处理大规模数据时尤为重要, 因为数据量大时, I/O操作往往成为系统性能的瓶颈.
此外, 列式数据库还可以针对特定的列进行高效的数据压缩和索引, 进一步提高查询性能.
假设我们有一个存储学生信息的行式数据库, 其中每一行表示一个学生的信息, 包括学号, 姓名, 年龄和成绩等.
现在我们需要查询所有学生的年龄和成绩.

在行式数据库中, 无论我们只需要学生的年龄和成绩, 系统仍然需要从磁盘中读取整个学生记录.
这是因为行式数据库将每个学生的信息连续存储在磁盘上, 所以要读取某个学生的年龄和成绩, 系统必须将整行数据读入内存,
然后再提取所需的列数据.

假设我们有一万名学生的信息, 每个学生记录占用1KB的空间.
如果我们只需要查询学生的年龄和成绩, 那么在行式数据库中, 系统需要读取一万条记录的完整数据, 总共10MB的数据量.

而在列式数据库中, 数据是按列存储的.
系统只需要读取并加载所需的列数据, 即学生的年龄和成绩, 而不需要读取整行记录.
假设每个学生的年龄和成绩分别占用100字节的空间, 那么在列式数据库中, 系统只需要读取一万条记录的年龄和成绩列, 总共只有1MB的数据量.

可以看到, 行式数据库由于需要读取整行数据, 即使查询只需要部分列数据, 也会产生较高的I/O开销.
而列式数据库通过按列存储数据, 可以减少读取的数据量, 降低了系统的I/O开销.
2.2.6 图形数据库
图形数据库顾名思义, 就是一种存储图形关系的数据库.
它利用了图这种数据结构存储了实体(对象)之间的关系.
关系型数据用于存储明确关系的数据, 但对于复杂关系的数据存储却有些力不从心.
<<骆驼祥子>>中人物之间的关系, 如果用关系型数据库则非常复杂, 用图形数据库将非常简单.
典型产品: Neo4J, InfoGrid等.

2023-10-10_00011

2.2.7 NoSQL 的演变
由于SQL一直称霸DBMS, 因此许多人在思考是否有一种数据库技术能远离SQL, 于是NoSQL诞生了, 但是随着发展却发现越来越离不开SQL.
到目前为止NoSQL阵营中的DBMS都会有实现类似SQL的功能.
下面是"NoSQL"这个名词在不同时期的诠释, 从这些释义的变化中可以看出NoSQL功能的演变:
1970: NoSQL = We have no SQL
1980: NoSQL = Know SQL
2000: NoSQL = No SQL!
2005: NoSQL = Not only SQL
2013: NoSQL = No, SQL!
NoSQL对SQL做出了很好的补充, 比如实际开发中, 有很多业务需求, 其实并不需要完整的关系型数据库功能, 非关系型数据库的功能就足够使用了.
这种情况下, 使用性能更高, 成本更低的非关系型数据库当然是更明智的选择.
比如: 日志收集, 排行榜, 定时器等.
2.2.8 非关系型数据库的优劣
非关系型数据库的优点:
* 1. 可扩展性: 非关系型数据库通常具有水平扩展的能力, 可以轻松地扩展以适应大规模数据的处理需求.
     它们能够分布式存储和处理大量数据, 并通过添加更多节点来提高性能.

* 2. 高性能: 非关系型数据库通过特定的数据模型和存储结构优化查询和访问性能.
     它们通常采用键值对, 文档, 列族, 图等数据模型, 以提供更高效的数据检索和处理能力.

* 3. 灵活的数据模型: 非关系型数据库不强制要求数据遵循严格的结构.
     相比之下, 关系型数据库需要事先定义和建立表的结构和关系.
     这种灵活性使得非关系型数据库适合存储半结构化和非结构化数据, 方便实时数据的处理和存储.

* 4. 高可用性和容错性: 非关系型数据库通常具有复制和分片等机制, 以提供高可用性和容错性.
     这意味着即使一个节点或服务器发生故障, 数据库系统仍然可以继续工作, 保证了数据的可靠性和持久性.

非关系型数据库的劣势:
* 1. 缺乏丰富的查询语言: 与关系型数据库相比, 非关系型数据库的查询能力通常较弱.
     它们可能不支持复杂的查询操作, 如联接和聚合.

* 2. 数据一致性的问题: 非关系型数据库通常采用分布式架构, 多个副本之间的数据同步存在一定延迟, 可能导致数据一致性的问题.
     由于最终一致性的特性, 某些应用场景下可能无法满足强一致性的需求.

* 3. 缺乏标准化和成熟度不够: 关系型数据库具有多年的发展和标准化, 在功能性, 可靠性和成熟度方面较为成熟.
     相比之下, 非关系型数据库的标准化程度较低, 生态系统和工具支持相对不足.

综合来说, 非关系型数据库在处理大规模, 高性能和灵活数据存储方面具有优势, 但在复杂查询, 数据一致性和标准化方面存在一些限制.
因此, 在选择数据库技术时应根据具体的应用场景和需求进行权衡.

3. MySQL简介

3.1 概述

MySQL是一个开放源代码的关系型数据库管理系统, 
由瑞典MySQL AB(创始人Michael Widenius)公司1995年开发, 迅速成为开源数据库的No.1.

特点:
* MySQL是一种关联数据库管理系统.
  将数据保存在不同的表中, 而不是将所有数据放在一个大仓库内, 这样就增加了速度并提高了灵活性.
* MySQL是开源的, 所以你不需要支付额外的费用.
* MySQL是可以定制的, 采用了GPL(GNU General Public License)协议, 你可以修改源码来开发自己的MySQL系统.
* MySQL支持大型的数据库.
  可以处理拥有上千万条记录的大型数据库.
* MySQL支持大型数据库, 支持5000万条记录的数据仓库, 32位系统表文件最大可支持4GB, 64位系统支持最大的表文件为8TB.
* MySQL使用标准的SQL数据语言形式.
* MySQL可以允许运行于多个系统上, 并且支持多种语言.
 这些编程语言包括C, C++, Python, Java, Perl, PHP和Ruby等.

3.2 发展史

互联网业务的快速发展推动了对数据库服务能力的不断提升, 而MySQL作为一种可靠, 高性能并且开源的数据库管理系统通过不断的优化和创新, 
以及适应新的部署方式和应用场景, 为互联网应用提供了丰富的数据库解决方案.
MySQL的主要发展里程碑和关键事件如下(每一个版本都有其独特的特点和重要的改进):
* 1. 1995: MySQL以一个开源项目的身份发布, 最初的版本号为0.01.

* 2. 1996: MySQL 1.0发布, 只面向一小拨人.
     随后, MySQL 3.11.1发布(MySQL没有2.x版本), 最开始只提供Solaris下的二进制版本.
     一个月后, Linux版本出现了.
     在接下来的两年里, MySQL被依次移植到各个平台.
     同年, 发布了MySQL 3.21, 第一款支持多表JOIN操作的版本.
     
* 3. 1998: 发布了MySQL 3.23, 添加了InnoDB存储引擎, 并支持事务和外键.

* 4. 1999~2000: MySQL AB公司在瑞典成立, 开发出了Berkeley DB引擎, 由于BDB支持事务处理, 因此MySQL从此开始支持事务处理了.

* 5. 2001: 发布了MySQL V3.23, 提供了MyISAM引擎以及Innodb引擎的雏形.

* 6. 2003: 发布了MySQL V4.0, 引入了新的语法特性, Innodb成为标准组件, 并加入了query_cache.
     同年, MySQL AB公司发布了MySQL 4.0, 引入了二进制日志和复制功能.
     
* 7. 2005: 发布了MySQL V5.0, 正式提供了存储过程, 触发器和视图功能.

* 8. 2008: 发布了MySQL V5.1, 提供了分区和行复制功能.
     同年, Sun Microsystems收购MySQL AB.
     
* 9. 2009: Oracle收购了Sun Microsystems, MySQL成为Oracle旗下产品.
     MySQL的创造者担心MySQL有闭源的风险, 因此创建了MySQL的分支项目MariaDB.
     
* 10. 2010: 发布了MySQL V5.5, 引入了半同步复制, 提高了数据安全性.

* 12. 2012: 发布了MySQL V5.6, 引入了全文检索, NoSQL支持和多主复制等功能.

* 13. 2017: 发布了MySQL V8.0, 引入了更多的JSON支持, 事务锁优化和全文检索的改进.
MySQL从5.7版本直接跳跃发布了8.0版本, 可见这是一个令人兴奋的里程碑版本.
MySQL 8版本在功能上做了显著的改进与增强, 开发者对MySQL的源代码进行了重构, 最突出的一点是多MySQL Optimizer优化器进行了改进.

3.3 Oracle vs MySQL

Oracle和MySQL是两种不同类型的关系型数据库管理系统, 适用于不同的使用场景.

Oracle数据库是一个非常强大和全面的数据库管理系统, 适用于大型企业和跨国企业.
它具有高度的可靠性, 稳定性和安全性, 并提供了广泛的功能和扩展性选项.
Oracle数据库通常用于处理大规模的数据集和高并发访问, 适合对性能和安全有高要求的企业.

MySQL是一个轻量级和开源的数据库管理系统.
它具有良好的性能, 可靠性和可伸缩性, 并且相对于Oracle来说更加经济实惠.
MySQL适用于中小型企业, 互联网公司以及需要处理较小规模数据的应用场景.
它被广泛应用于Web应用程序和中小型网站, 因为它的体积小, 速度快, 且成本较低.
许多知名的互联网公司(Facebook, Twitter, YouTube, 阿里巴巴, 去哪儿, 美团外卖, 腾讯)都选择使用MySQL作为他们的网站数据库.

3.4 发行版本介绍

MySQL的几个发行版本如下:
* 1. MySQL Community Server(社区版本): 这是MySQL的开源免费版本, 任何人都可以自由下载和使用.
     然而, 它不提供官方技术支持, 适合大多数普通用户使用.

* 2. MySQL Enterprise Edition(企业版本): 这是MySQL的付费版本, 需要购买许可证才能使用.
     它提供了更多功能和更完备的技术支持, 更适合对数据库功能和可靠性要求较高的企业客户.

* 3. MySQL Cluster(集群版): 这是MySQL的开源免费版本, 用于构建集群服务器.
     它允许将多个MySQL服务器封装成一个服务器, 以提供更高的可扩展性和可用性.
     请注意, 使用MySQL Cluster需要基于社区版或企业版.

* 4. MySQL Cluster CGE (Commercial Generic Edition) 高级集群版: 这是MySQL Cluster的付费版本, 需要购买许可证.
     它提供了更多高级功能和支持, 适合那些对集群部署有更高要求的用户.

4. MySQL的境搭建

分别安装MySQL 8.1版本与MySQL 5.7版本.

4.1 MySQL 8.X版本安装

4.1.1 MySQL的下载
* 1. 官网地址: https://www.mysql.com .
* 2. 点击 DOWNLOADS(下载).
* 3. 选择 MySQL Community (GPL) Downloads(MySQL社区(GPL)下载) » .

2023-10-11_00007

* 4. 选择 MySQL Community Server(MySQL 社区服务器) .

image-20231011140807350

* 5. 在General Availability(GA) Releases(通用版(GA)发布)中选择适合的版本.

     在Windows平台下, MySQL提供了两种安装文件: 
     1. MySQL二进制分发版(.msi安装文件).
        一般来说, 推荐使用MySQL二进制分发版, 因为它提供了图形化的安装向导过程, 使安装过程更加简单和方便.
        通过运行.msi文件, 可以轻松地按照指示完成MySQL的安装, 无需其他工具即可启动MySQL服务.

     2. 免安装版(.zip压缩文件).
        免安装版是将MySQL程序打包成压缩文件, 需要将其解压缩到指定位置, 然后手动配置环境变量等步骤才能启动MySQL服务.
        这种方式相对于二进制分发版更适合那些对MySQL有特殊需求或喜好自定义配置的用户.

2023-10-11_00009

* 6. 提示: Login Now or Sign Up for a free account(立即登录或注册免费帐户).
* 7. 选择: No thanks, just start my download(不用了, 谢谢, 开始下载吧).

image-20231011142105966

4.1.2 MySQL的安装
* 1. 下载完成后, 找到下载文件, 双击进行安装.
* 2. 点击下一步.

2023-10-11_00011

* 3. 选择接受许可协议.

2023-10-11_00013

* 4. 选择安装的类型 --> 点击Custom(自定义安装).

2023-10-11_00015

* 5. 自定义安装 --> 可以选择一个安装路径即可, 其他功能默认即可(有需求可以自定义), 设置好后 --> Next(下一步).

2023-10-11_00022

* 6. 提示准备安装 --> 选择install(安装).

2023-10-11_00024

* 7. 安装MySQL安装 --> 选择打开MySQL配置器.
     这些配置信息保存在数据文件中, 卸载重装的情况下没有删除数据目录, 就不需要配置.

2023-10-11_00026

* 8. 配置器向导 --> Next(下一步).

2023-10-12_00002

* 9. 类型和网络默认即可: 配置类型为"Development Computer", 端口号为"3306", 打开防火墙...
     其中, Config Type选项用于设置服务器的类型, 单击该选项右侧的下三角按钮, 可以看到3个选项:
     1. "Development Computer"(开发计算机): 这个选项适用于将MySQL安装在开发计算机上的情况.
          它会配置MySQL服务器以适应开发环境的需求, 提供更多开发工具和功能, 例如调试工具和示例数据库.
          该配置适合开发人员和测试人员在本地开发和调试应用程序时使用.

     2. "Server Computer"(服务器计算机): 这个选项适用于将MySQL安装在专用的服务器计算机上的情况.
        它会配置MySQL服务器以适应生产环境的需求, 并优化性能和安全性, 以应对高负载和大规模并发访问的情况.
        该配置适合将MySQL用作生产环境中的数据库服务器.

     3. "Dedicated Computer"(专用计算机): 尽管MySQL安装过程中可能没有专门的"Dedicated Computer"选项,
         通常这个术语是指将计算机专门用于承载特定任务或应用程序的情况.
         如果你有一个专门用于承载MySQL服务器的计算机, 你可以选择"Server Computer"选项来配置MySQL服务器以适应该专用计算机的需求, 
         并实现性能和安全性上的优化.

2023-10-12_00004

* 10 设置root用户的密码 --> Next(下一步).

2023-10-12_00006

* 11. Windows服务设置(默认即可) --> Next(下一步). 

2023-10-12_00008

* 12. 服务器文件权限(默认即可) --> Next(下一步). 

2023-10-12_00010

* 13. 示例数据库(默认即可, 不需要创建) --> Next(下一步). 

2023-10-12_00012

* 14. 应用配置 --> Execute(执行).

2023-10-12_00014

* 15. 配置操作完成 --> Next(下一步).

2023-10-12_00016

* 16. 配置完成 --> Finish(完成).

2023-10-12_00018

安装MySQL后, 你将得到MySQL的客户端和服务器.
MySQL客户端路径: C:\Program Files\MySQL\MySQL Server X.Y\bin\mysql.exe.
MySQL服务端路径: C:\Program Files\MySQL\MySQL Server X.Y\bin\mysqld.exe.
其中X.Y代表安装的MySQL版本号.

image-20231013135858151

MySQL客户端: 是用于与MySQL服务器进行通信的工具; 它可以让你执行查询, 更新, 管理数据库等操作.
MySQL服务器: 是实际运行和管理数据库的核心组件.
* 17. 配置环境变量.
      1. 在桌面上右击[此电脑]图标, 在弹出的快捷菜单中选择[属性]菜单命令.
         或者: win + r打开运行后, 在搜索框中输入"sysdm.cpl"打开系统属性.
      2. 打开[系统]窗口, 单击[高级系统设置]链接.
      3. 打开[系统属性]对话框, 选择[高级]选项卡, 然后单击[环境变量]按钮.
      4. 打开[环境变量]对话框, 在系统变量列表中选择path变量.
      5. 单击[编辑]按钮, [编辑环境变量]对话框中, 
         将MySQL应用程序的bin目录(C:\Program Files\MySQL\MySQL Server 8.1\bin)添加到变量值中.
     6. 添加完成之后, 单击[确定]按钮, 这样就完成了配置path变量的操作, 然后就可以在cmd命令提示窗口直接输入MySQL命令启动数据库.

* 18. 查看版本信息: 可以在命令行通过输入: mysql -V 或者 mysql --version 获取MySQL Server服务版本的信息.

image-20231013172847037

需要记录的信息:
* 1. 服务的名称: MySQL81.
* 2. 端口号: 3306.
* 3. 软件安装目录: C:\Program Files\MySQL\MySQL Server 8.1. 
* 4. 客户端启动程序路径: C:\Program Files\MySQL\MySQL Server 8.1\bin.
* 5. 配置文件路径: C:\ProgramData\MySQL\MySQL Server 8.1.
4.1.3 MySQL服务设置
MySQL安装完毕之后, 需要启动服务器进程, 不然客户端无法连接数据库(默认是开启的).
MySQL服务是一个守护进程(daemon), 它在后台运行并监听指定的端, 等待客户端应用程序的连接请求.
在前面的配置过程中, 已经将MySQL安装为Windows服务, 并且勾选当Windows启动时, 启动MySQL服务.
添加服务命令(需要配置好环境变量后执行, 已经添加就不需要执行): mysqld服务名称 --install .
设置服务的启动与停止的方式:
* 1. 使用图形界面工具设置windows服务.
     1. 打开windows服务: win + r 启动运行, 在搜索框中输入"services.msc"后按下回车.
     2. 设置MySQL服务: 找到MySQL81 --> 双击打开服务属性 --> 查看属性 --> 设置启动类型为'自动', 设置服务状态为'启动'.
     3. 完整配置: 设置好之后点击确认.

image-20231013142526632

可执行文件的路径 "C:\Program Files\MySQL\MySQL Server 8.1\bin\mysqld.exe" 
	--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.1\my.ini" MySQL81
* 2. 使用命令cmd提示符方式设置windows服务(需要以管理员权限启动cmd, 否则权限不足).
     win + s弹出搜索, 在搜索框内输入cmd --> 选择以管理员身份运行.

image-20231013184339550

* 3. 输入命名:
     停止MySQL服务命令: net stop  MySQL服务的名称, 例如: net stop  MySQL81 .
     启动MySQL服务命令: net start MySQL服务的名称, 例如: net start MySQL81 .

image-20231013143602158

4.1.4 MySQL客户端登录
当MySQL服务启动完成后, 可以通过客户端来登录MySQL数据库.
登录命令格式: mysql -h 主机名 -P 端口号 -u 用户名 -p密码
* 在本地使用主机名可以使localhost或者IP地址127.0.0.1.

注意事项:
* 1. -p与密码之间不能有空格, 其他参数名与参数值之间可以有空格也可以没有空格.
     例如: mysql -h localhost -P 3306 -u root -pzxc123  
     
* 2. 密码建议在下一行输入, 保证安全.
     例如: mysql -h localhost -P 3306 -u root -p       
           Enter password:****

* 3. 客户端和服务器在同一台机器上, -hlocalhost可以省略, 如果端口号没有修改: -P3306也可以省略.
     简写: mysql -u root -p
           Enter password:****

image-20231013145308922

退出命令: quit 或者 exit.
mysql> quit
Bye
C:\Users\13600>

mysql> exit
Bye
C:\Users\13600>
4.1.5 MySQL的卸载
在某些情况下, 可能电脑上安装后MySQL, 后面卸载掉了, 又由于没有卸载干净导致再次安装时安装失败, 就需要了解MySQL的卸载,
* 1. 停止MySQL服务
     1. 打开windows服务: win + r 启动运行搜索框, 在输入框中输入"services.msc"后按下回车.
     2. 设置服务状态为停止.
     3. 在可执行文件的路径下可以看到文件的路径.

image-20231013174016299

* 2. 卸载程序:
     1. 进去控制面板: win + r打开运行后, 在搜索框中输入"control".
     2. "控制面板"选择"程序卸载", 并在程序列表中MySQL8.x, 直接双击卸载.
     3. 弹出MySQL配置器 
     4. Remove Data(删除数据) --> 选择Removve the data dirctory(删除数据目录).
     5. Remove Steps(删除步骤) --> 点击Execute(执行).
     6. 删除之后点击完成.
     * 上面几步会删除软件文件(包括第五步删除删除注册: 删除MySQL服务), 仅仅会保留一个数据目录. 

image-20231013175313465

2023-10-14_00001

2023-10-14_00003

2023-10-14_00004

* 3. 清理残余文件:
     1. 删除软件的文件: 默认在 C:\Program Files\MySQL\MySQL Server 5.7.
     2. 删除软件的数据: 默认在 C:\ProgramData\MySQL\MySQL Server 5.7,
        这个目录是一个隐藏目录, 在文件夹的工具栏中设置现在隐藏的项目.
     3. 安装时可能是自定义的路径需要在电脑硬盘上找一下.

image-20231013182558859

* 4. 清理注册表:
     1. 打开注册表: win + r打开运行后, 在搜索框中输入"regedit".
     2. 删除MySQL自启服务: , 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL81 .
        其中ControlSet00x后面的序号可能在不同的电脑上不同.
     3. 删除MySQL启动初始化服务: : 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL81 .

image-20231013182917490

image-20231013183103771

* 5. 删除环境变量:
     1. 打开系统属性: win + r打开运行后, 在搜索框中输入"sysdm.cpl".
     2. 选择[高级]选项卡, 然后单击[环境变量]按钮.
     3. 打开[环境变量]对话框, 在系统变量列表中选择path变量.
     4. 单击[编辑]按钮, [编辑环境变量]对话框中, 将其中关于mysql的环境变量删除.

image-20231013182429458

* 6. 重启电脑.

4.2 MySQL5.X版本安装

4.2.1 MySQL的下载
* 1. 官网地址: https://www.mysql.com .
* 2. 点击 DOWNLOADS(下载).
* 3. 选择 MySQL Community (GPL) Downloads(MySQL社区(GPL)下载) » .

2023-10-11_00007

* 4. 选择 MySQL Community Server(MySQL 社区服务器) .

image-20231011140807350

* 5. 点击 Go to Download Page 跳转到MSI安装文件下载页面.

2023-10-15_00001

* 6. 找到软件安装包点击Download(下载).

image-20231015230223269

* 7. 提示: Login Now or Sign Up for a free account(立即登录或注册免费帐户).
* 8. 选择: No thanks, just start my download(不用了, 谢谢, 开始下载吧).

image-20231015230452329

4.2.2 MySQL的安装
* 1. 下载完成后, 找到下载文件, 双击进行安装.
* 2. 验证互联网跳过即可.

2023-10-15_00004

* 3. 选择安装类型 --> Coustom(自定义) --> Next(下一步).

2023-10-15_00006

* 4. 选择产品 --> 选中MySQL Sever x64版本 --> 点击向左的箭头添加产品.

2023-10-15_00008

* 5. 选中产品会展示出一个高级选项 --> 高级选项中可以设置软件安装的位置与数据存放的位置 --> 设置好之后点击ok --> Next(下一步).

2023-10-15_00010

* 6. 确认安装的产品 --> Execute(执行).

2023-10-15_00011

* 6. 完成安装 --> Next(下一步).

image-20231015233353457

* 7. 提示打开产品配置 --> Next(下一步).
     这些配置信息保存在数据文件中, 卸载重装的情况下没有删除数据目录, 就不需要配置.

2023-10-15_00014

* 8. 设置端口号为3307(8.x版本使用3306).

2023-10-15_00016

* 9. 设置root用户密码 --> Next(下一步).

2023-10-15_00018

* 10. Windows服务设置(默认即可) --> Next(下一步). 

2023-10-15_00021

* 11. 服务器文件权限(默认) --> Next(下一步).

2023-10-15_00023

* 12. 执行应用配置.

2023-10-15_00025

* 13. 点击Finish(完成).

2023-10-16_00001

* 14. 产品配置成功 --> Next(下一步).

2023-10-16_00004

* 15. 安装完成 --> Finish(完成).

2023-10-16_00005

安装MySQL后, 你将得到MySQL的客户端和服务器.
MySQL客户端路径: C:\Program Files\MySQL\MySQL Server X.Y\bin\mysql.exe.
MySQL服务端路径: C:\Program Files\MySQL\MySQL Server X.Y\bin\mysqld.exe.
其中X.Y代表安装的MySQL版本号.

image-20231016004752588

* 16. 复制musql.exe, 改名为mysql5.exe.
* 17. 配置环境变量.
      1. 在桌面上右击[此电脑]图标, 在弹出的快捷菜单中选择[属性]菜单命令.
         或者: win + r打开运行后, 在搜索框中输入"sysdm.cpl"打开系统属性.
      2. 打开[系统]窗口, 单击[高级系统设置]链接.
      3. 打开[系统属性]对话框, 选择[高级]选项卡, 然后单击[环境变量]按钮.
      4. 打开[环境变量]对话框, 在系统变量列表中选择path变量.
      5. 单击[编辑]按钮, [编辑环境变量]对话框中, 
         将MySQL应用程序的bin目录(C:\Program Files\MySQL\MySQL Server 5.7\bin)添加到变量值中.
     6. 添加完成之后, 单击[确定]按钮, 这样就完成了配置path变量的操作, 然后就可以在cmd命令提示窗口直接输入MySQL命令启动数据库.

2023-10-16_00009

* 18. 查看版本信息: 可以在命令行通过输入: mysql5 -V 或者 mysql5 --version 获取MySQL Server服务版本的信息.
      电脑上安装了两个版本的mysql, 直接输入mysql按依次环境变量中列表中的路径, 8.x版本的写在上面.
      为了很好的区分版本, 复制musql.exe, 改名为mysql5.exe. 之后便通过mysql5来启动mysql5.7.

image-20231016005544825

需要记录的信息:
* 1. 服务的名称: MySQL57.
* 2. 端口号: 3306.
* 3. 软件安装目录: C:\Program Files\MySQL\MySQL Server 5.7. 
* 4. 客户端启动程序路径: C:\Program Files\MySQL\MySQL Server 5.7\bin.
* 5. 配置文件路径: C:\ProgramData\MySQL\MySQL Server 5.7.
* 6. 配置向导文件路径: C:\ProgramData\MySQL\MySQL Installer for Windows.
4.2.3 MySQL服务设置
MySQL安装完毕之后, 需要启动服务器进程, 不然客户端无法连接数据库(默认是开启的).
MySQL服务是一个守护进程(daemon), 它在后台运行并监听指定的端, 等待客户端应用程序的连接请求.
在前面的配置过程中, 已经将MySQL安装为Windows服务, 并且勾选当Windows启动时, 启动MySQL服务.
添加服务命令(需要配置好环境变量后执行, 已经添加就不需要执行): mysqld服务名称 --install .
设置服务的启动与停止的方式:
* 1. 使用图形界面工具设置windows服务.
     1. 打开windows服务: win + r 启动运行, 在搜索框中输入"services.msc"后按下回车.
     2. 设置MySQL服务: 找到MySQL57 --> 双击打开服务属性 --> 查看属性 --> 设置启动类型为'自动', 设置服务状态为'启动'.
     3. 完整配置: 设置好之后点击确认.

image-20231016010728026

可执行文件的路径 "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" 
	--defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" MySQL57
* 2. 使用命令cmd提示符方式设置windows服务(需要以管理员权限启动cmd, 否则权限不足).
     win + s弹出搜索, 在搜索框内输入cmd --> 选择以管理员身份运行.

image-20231013184339550

* 3. 输入命名:
     停止MySQL服务命令: net stop  MySQL服务的名称, 例如: net stop  MySQL57 .
     启动MySQL服务命令: net start MySQL服务的名称, 例如: net start MySQL57 .

image-20231016010831498

4.2.4 MySQL客户端登录
当MySQL服务启动完成后, 可以通过客户端来登录MySQL数据库.
登录命令格式: mysql -h 主机名 -P 端口号 -u 用户名 -p密码
* 在本地使用主机名可以使localhost或者IP地址127.0.0.1.

注意事项:
* 1. -p与密码之间不能有空格, 其他参数名与参数值之间可以有空格也可以没有空格.
     例如: mysql5 -h localhost -P 3307 -u root -pzxc123  
     
* 2. 密码建议在下一行输入, 保证安全.
     例如: mysql5 -h localhost -P 3307 -u root -p       
           Enter password:****

* 3. 客户端和服务器在同一台机器上, -hlocalhost可以省略, 如果端口号没有修改: -P3306也可以省略.
     简写: mysql5 -u root -p
           Enter password:****

image-20231016010942910

退出命令: quit 或者 exit.
mysql> quit
Bye
C:\Users\13600>

mysql> exit
Bye
C:\Users\13600>
4.2.5 MySQL的卸载
在某些情况下, 可能电脑上安装后MySQL, 后面卸载掉了, 又由于没有卸载干净导致再次安装时安装失败, 就需要了解MySQL的卸载,
* 1. 停止MySQL服务
     1. 打开windows服务: win + r 启动运行搜索框, 在输入框中输入"services.msc"后按下回车.
     2. 设置服务状态为停止.
     3. 在可执行文件的路径下可以看到文件的路径.

image-20231016011110528

* 2. 卸载程序:
     1. 进去控制面板: win + r打开运行后, 在搜索框中输入"control".
     2. "控制面板"选择"程序卸载", 并在程序列表中找到MySQL Install Community  MySQL Sever 5.x双击卸载. 
        卸载MySQL Install Community 时会删除配置向导文件(包括MySQL服务, 也就是包含第五步删除注册表的操作).

image-20231016011307156

* 3. 清理残余文件:
     1. 删除软件的文件: 默认在 C:\Program Files\MySQL\MySQL Server 5.7.
     2. 删除软件的数据: 默认在 C:\ProgramData\MySQL\MySQL Server 5.7, 
        这个目录是一个隐藏目录, 在文件夹的工具栏中设置现在隐藏的项目.
     3. 安装时可能是自定义的路径需要在电脑硬盘上找一下.

image-20231016011942340

* 4. 清理注册表:
     1. 打开注册表: win + r打开运行后, 在搜索框中输入"regedit".
     2. 删除MySQL自启服务: , 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL57 .
        其中ControlSet00x后面的序号可能在不同的电脑上不同.
     3. 删除MySQL启动初始化服务: : 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL57 .

image-20231016012704139

image-20231016012636702

* 5. 删除环境变量:
     1. 打开系统属性: win + r打开运行后, 在搜索框中输入"sysdm.cpl".
     2. 选择[高级]选项卡, 然后单击[环境变量]按钮.
     3. 打开[环境变量]对话框, 在系统变量列表中选择path变量.
     4. 单击[编辑]按钮, [编辑环境变量]对话框中, 将其中关于mysql的环境变量删除.

image-20231016012315705

* 6. 重启电脑.

5. MySQL使用演示

5.1 查看所有数据库

查看所有的数据库命令: show databases;
mysql> show databases; -- 查看所有的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
这四个库是MySQL数据库系统中的系统数据库, 用于存储和管理系统和元数据信息. 它们包括:
* 1. information_schema: 该数据库包含了关于数据库, , , 索引, 权限等数据库对象的元数据信息.
     可以通过查询information_schema数据库来获取有关数据库结构和配置的详细信息.

* 2. mysql: mysql 数据库是用于存储和管理 MySQL 数据库系统本身的配置和权限信息.
     它包含了用户账户, 密码, 权限, 连接信息, 系统变量等. 
     通过操作mysql数据库, 可以管理用户账户, 设置权限, 查看系统状态等.

* 3. performance_schema: 是一个性能监控和分析工具, 用于收集和展示关于MySQL数据库系统性能的详细信息.
     它包含了各种性能指标, 事件和状态变量, 可以帮助开发人员和运维人员进行性能调优和故障排查.

* 4. sys: 用于提供更方便的系统管理和监测功能.
     它基于performance_schema和information_schema的视图, 提供了更高级的查询和报告工具, 用于可视化和分析MySQL数据库的系统信息.

这些系统数据库是MySQL数据库系统的一部分, 存储了关键的系统和元数据信息, 对于理解和管理MySQL数据库至关重要.
但通常情况下, 普通用户不需要直接操作这些系统数据库, 而是通过其他工具和命令来访问和管理MySQL数据库.

5.2 创建数据库

创建数据库命令: create database 数据库名;
* 名称不能与已经存在的数据库重名.
mysql> create database test1; -- 创建一个名称test1的数据库
Query OK, 1 row affected (0.01 sec)

mysql> show databases; -- 查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.00 sec)

5.3 使用数据库

使用数据库命令: use 数据库名;
* 如果没有使用use语句, 后面针对数据库的操作也没有加"数据名"的限定, 
  那么会报"ERROR 1046(3D000): No database selected"(没有选择数据库).
  使用完use语句之后, 如果接下来的SQL都是针对一个数据库操作的.
  如果要针对另一个数据库操作, 那么要重新use 指定使用的数据库.
mysql> use test1; -- 指定操作的数据库, 提示数据库已更改
Database changed  

5.4 查看数据库中所有表格

查看数据库中所有表格命令: show tables;
mysql> show tables;  -- 新建的数据库没有表格
Empty set (0.01 sec)

5.5 创建表格

创进表格命令: create table 表名称( 字段名 数据类型, 字段名 数据类型, ...);
-- 创建两个字段, id与姓名.
mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)

-- 查看所有表格
mysql> show tables; 
+-----------------+
| Tables_in_test1 |
+-----------------+
| student         |
+-----------------+
1 row in set (0.00 sec)

5.6 查看表数据

查看表数据命令: select * from 表名称;
* 其中, 星号(*)表示所有字段的意思.
-- 查看表中所有字段的信息
mysql> select * from student;
Empty set (0.01 sec)
5.7 往表格中写入数据
往表格中写入数据命令: insert into 表名称 values(1, 2, ...);
* 其中值与设置的字段类型一致, 否则会报错.
-- 插入一条数据, id为整型, 姓名为字符串类型.
mysql> insert into student values(1, 'kid');
Query OK, 1 row affected (0.01 sec)

-- 查看表中的所有数据
mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | kid  |
+------+------+
1 row in set (0.00 sec)

6. 字符集设置

在MySQL 8.x版本中, 默认情况下是支持使用中文字符串的, 字符集设置为了UTF-8.
这意味着您可以直接在MySQL 8.x中存储, 检索和操作中文字符串, 不需要额外的配置.

而在MySQL 5.x版本中, 默认的字符集设置为了Latin1(也称为ISO 8859-1), 不支持存储中文字符串.
如果要在MySQL 5.x中支持中文字符串, 需要手动进行字符集的设置和配置.

6.1 字符集问题

-- MySQL 8.X版本
mysql> insert into student values(2,'蓝图');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | kid  |
|    2 | 蓝图 |
+------+------+
2 rows in set (0.00 sec)
查看MySQL数据库服务器的字符集设置的命令: show variables like 'character_set%';
mysql> show variables like 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
    | character_set_client     | gbk                                                     |
    | character_set_connection | gbk                                                     |
    | character_set_database   | utf8mb4                                                 |
    | character_set_filesystem | binary                                                  |
    | character_set_results    | gbk                                                     |
    | character_set_server     | utf8mb4                                                 |
    | character_set_system     | utf8mb3                                                 |
    | character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.1\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.02 sec)
每一行的含义:
* 1. character_set_client: 客户端使用的字符集, 这里值为gbk, 表示客户端使用GBK字符集.
* 2. character_set_connection: 连接所使用的字符集, 这里值为gbk, 表示连接使用GBK字符集.
* 3. character_set_database: 当前数据库的字符集, 这里值为utf8mb4, 表示当前数据库使用UTF-8字符集.
* 4. character_set_filesystem: 文件系统的字符集. 这里值为binary, 表示文件系统使用二进制字符集.
* 5. character_set_results: 结果集的字符集, 这里值为gbk, 表示结果集使用GBK字符集.
* 6. character_set_server: 服务器使用的字符集, 这里值为utf8mb4, 表示服务器使用UTF-8字符集.
* 7. character_set_system: 系统字符集, 这里值为utf8mb3, 表示系统使用UTF-8字符集, 但使用了较旧的utf8mb3编码.	
* 8. character_sets_dir: 字符集文件目录的路径,
     这里值为'C:\Program Files\MySQL\MySQL Server 8.1\share\charsets\', 表示字符集文件存放在该路径下.

根据配置, 客户端和连接使用GBK字符集, 这意味着在发送和接收数据时, 它们将按照GBK字符集进行编码和解码.
而数据库和服务器使用UTF-8字符集, 这意味着在存储, 操作和返回数据时, 它们将使用UTF-8字符集.
-- MySQL 5.X版本
C:\Users\13600>mysql5 -h localhost -P 3307 -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.43-log MySQL Community Server (GPL)
...

-- 查看所有数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)

-- 创建库
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

-- 查看创建的库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.00 sec)

-- 使用创建的库
mysql> use test1;
Database changed

-- 创建学生表
mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.03 sec)

-- 查看学生表
mysql> select * from student;
Empty set (0.00 sec)

-- 写上数据(英文字符串)
mysql> insert into student values(1, 'kid');
Query OK, 1 row affected (0.01 sec)

-- 写入数据(中文字符串), 报错: 错误1366(HY000): 第1行的列"name"的字符串值"\xC0\xB6\xCD\xBC"不正确.
mysql> insert into student values(2, '蓝图');
ERROR 1366 (HY000): Incorrect string value: '\xC0\xB6\xCD\xBC' for column 'name' at row 1

6.2 查看字符集

查看表的创建信息命令: show create table 表名称\G
-- 末尾不需要加;号结尾, 其中, 字符集=utf8
mysql> show create table student\G
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
1 row in set (0.00 sec)

2023-10-16_00020

查看数据库的创建信息命令: show create database 数据库名\G
-- 末尾不需要加;号结尾
mysql> show create database test1\G
*************************** 1. row ***************************
       Database: test1
Create Database: CREATE DATABASE `test1` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)

2023-10-16_00021

-- 查看MySQL数据库服务器的字符集设置
mysql> show variables like 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
每一行的含义:
* 1. character_set_client: 客户端使用的字符集, 这里值为gbk, 表示客户端使用GBK字符集.
* 2. character_set_connection: 连接所使用的字符集, 这里值为gbk, 表示连接使用GBK字符集.
* 3. character_set_database: 当前数据库的字符集, 这里值为latin1, 表示当前数据库使用拉丁语字符集.
     MySQL 最初在1995年发布时, 拉丁语字符集latin1是最常用的字符集之一.
     考虑到早期用户的需求以及与其他系统的互操作性, MySQL选择了latin1作为默认的字符集.
* 4. character_set_filesystem: 文件系统的字符集. 这里值为binary, 表示文件系统使用二进制字符集.
* 5. character_set_results: 结果集的字符集, 这里值为gbk, 表示结果集使用GBK字符集.
* 6. character_set_server: 服务器使用的字符集, 这里值为latin1, 表示服务器使用拉丁语字符集.
* 7. character_set_system: 系统字符集, 这里值为utf8, 表示系统使用UTF-8字符集.
* 8. character_sets_dir: 字符集文件目录的路径,
     这里值为'C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\', 表示字符集文件存放在该路径下.

根据配置, 客户端和连接使用GBK字符集, 这意味着在发送和接收数据时, 它们将按照GBK字符集进行编码和解码.
而数据库和服务器使用UTF-8字符集, 这意味着在存储, 操作和返回数据时, 它们将使用latin1字符集, 所以保存中文信息会报错.

MySQL的字符集设置是多层次的, 包括服务器级别, 数据库级别和连接级别等.
可以根据需要, 通过相关命令或配置文件来修改和设置字符集.

6.3 字符集设置

随着时间的推移, 全球化和国际化的需求不断增加, 其他字符集如UTF-8逐渐成为更常见, 也是更友好的选择.
* 1. 找到配置文件: C:\ProgramData\MySQL\MySQL Server 5.7\my.ini .
* 2. 在配置文件中找到服务端的配置行, 并添加配置信息.
     注意: 已经创建的数据库字符集不会改变, 新创建的数据库才会使用新配置的字符集.
# 第76行下面添加配置信息, MySQL服务器的字符集为utf8, 并使用utf8_general_ci作为排序规则.
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

image-20231016173713892

* 3. 配置文件一旦修改了, 需要重启服务端生效, 再重新连接服务端.
     停止MySQL服务命令(管理员身份): net stop  MySQL57 .
     启动MySQL服务命令(管理员身份): net start MySQL57 .
     注意点: 如果配置文件有问题是无法启动服务的, 启动服务时需要配置文件.
C:\Users\13600\Desktop>net stop  MySQL57
MySQL57 服务正在停止..
MySQL57 服务已成功停止.

C:\Users\13600\Desktop>net start MySQL57
MySQL57 服务正在启动 .
MySQL57 服务已经启动成功.
C:\Users\13600\Desktop>mysql5 -h localhost -P 3307 -u root -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.43-log MySQL Community Server (GPL)
...


mysql> show variables like 'character_set%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.00 sec)
* 4. 创建新的数据库与表格测试字符串.
-- 创建数据库
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)

-- 查看数据库的创建信息(默认使用utf8)
mysql> show create database test2\G
*************************** 1. row ***************************
       Database: test2
Create Database: CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

-- 使用数据库
mysql> use test2;
Database changed

-- 创建表
mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.04 sec)

-- 查看表的创建信息(字符集=utf8)
mysql> show create table student\G
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

-- 写入数据(中文字符串)
mysql> insert into student values(1, '蓝图');
Query OK, 1 row affected (0.01 sec)

-- 查看所有数据
mysql> select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | 蓝图 |
+------+------+
1 row in set (0.00 sec)

7. Navicat

Navicat: 是一款流行的数据库管理工具, 它支持多种数据库系统, 包括MySQL, PostgreSQL, Oracle等.
Navicat提供了用于管理和操作数据库的用户友好界面, 使用户能够轻松地创建, 编辑和维护数据库.
它具有强大的查询功能, 数据导入导出功能, 数据同步功能等, 适用于开发人员和数据库管理员在开发和维护数据库时的各种需求.

官网地址: https://navicat.com.cn/, 免费试用30, 可使用配套资源中的po_jie版本, 安装描述安装即可.
Navicat连接数据库的步骤:
* 1. 打开Navicat软件.
* 2. 在连接图标处下拉选择"MySQL".

image-20231016212706715

* 3. 设置连接的服务端信息.
     连接名: loacl_MySQL8.1
     主机: localhost
     端口: 3306
     用户名: root
     密码: zxc123

image-20231016213500104

* 4. 点击测试连接.

image-20231016213946582

* 5. 点击确认 --> 再次点确认进行连接.
* 6. 依次展开连接名, 数据库名, 表名称, 最后打开表格.

image-20231016214559932

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值