MySQL:介绍和部署

  • 认识数据库
    • 什么是数据库
    • 计算机数据库的分类
    • 关系型数据库的结构
    • 关系型数据库的三大范式
      • 第一范式(1NF)
      • 第二范式(2NF)
      • 第三范式(3NF)
    • SQL语言介绍
    • 主流数据库
    • 数据库管理工具
  • MySQL基础知识
    • MySQL基本架构
    • MySQL存储引擎
    • 模式与模式所有人
    • 内模式
  • 部署MySQL
    • 在本地部署MySQL
    • 使用云数据库服务
    • 登录MySQL
    • 使用Navicat登录

认识数据库

什么是数据库

数据库(Database,DB),顾名思义是指大量数据的集合。它是一个通过一些数据结构实现的,用于存储、管理大量数据的仓库。例如,我们生活中的图书馆、电话本等,就属于广义上的“数据库”。(它们都是大量数据的集合)

计算机数据库的分类

计算机上的数据库可以分为两种类型:关系型数据库非关系型数据库

  • 关系型数据库(RDBMS)是基于关系模型上的,由行和列来存储数据的数据库。多个行和列构成了一张表,多张表构成了一个数据库。它遵守ACID特性。(类似于Excel)
  • 非关系型数据库(NoSQL)的重要特征是以对象的方式存储数据,数据之间没有关系。它具有高性能、可扩展等优点,常用于大数据处理领域。

关系型数据库的结构

关系型数据库主要由数据库、数据表、字段和行等组成。一个数据库中包含了多张数据表,一张数据表中包含了多个字段。行由多个字段组成,保存着一条数据,因此行又被称为一条记录。

关系型数据库的三大范式

在关系型数据库中,为了提高性能,便于管理,每个数据库都要符合一定的规范。我们将这些规范标准称为范式低等级范式是高等级范式的基础

范式有五个等级:1NF - 5NF。一般情况下只要将数据库设计到3NF即可。范式等级过低会导致关系复杂,容易混乱冗余,不利于管理;范式等级过高则会浪费系统资源(比如磁盘I/O、内存空间、CPU使用率等)。下面举例介绍1NF到3NF的标准,例子如下:

假设有一张表,记录璃月千岩军各支队的地址与基本信息,该表有如下字段:
1.序号 2.支队ID 3.人数 4.地址 5.地区负责单位 6.是否在海外 7.查询权限等级 8.建立时间
现在对这张表进行规格化,要求规格到3NF。

第一范式(1NF)

第一范式的基本内容是各字段具有原子性无重复字段,它具有如下要求:

  • 数据库表的每一列都不可再分(即具有原子性)
  • 数据表的每一个属性只能包含一个值
  • 关系中每个数组的值数量必须相同数组内容不能相同
  • 第一范式是关系型数据库的基础,不符合第一范式的数据库不是关系型数据库

现在我们可以对该表进行基于1NF的规格化。我们可以看到,根据璃月地图,地址可以细分为国家-一级地区-二级地区,而且不排除千岩军在璃月境外有驻军的情况。因此将表规格化为:

第二范式(2NF)

第二范式的基本内容是每条记录应可以被唯一地区分实体属性完全依赖于主关键字。(即表中所有字段只和主键有联系)
为了区分各条记录,应该设置一个主键字段。如果有属性依赖于主关键字的部分属性,应该为其创建新表。下面对该表进行基于2NF的规格化:

  1. 表中的所有字段(人数、地区等)都由支队编号决定,所以支队编号能唯一区分各支队的信息,故表的主键应该是armyID而非id(记录序号)
  2. 本表的依赖关系如下:
支队编号、一二级地区 -> 人数、地区负责单位、是否在海外、查询权限、建立时间

可以看到地区负责单位是否在海外同时依赖了支队编号一二级地区,所以重新规划依赖关系如下:

支队信息表:支队编号 -> 人数、查询权限、建立时间
支队驻地表:支队编号 -> 一二级地区、地区负责单位、是否在海外

表如下:army_info(支队信息表)、army_region(支队驻地表)

第三范式(3NF)

第三范式(3NF)的基本内容是关系表中不存在非关键字段对任意关键字段的传递函数依赖

传递函数依赖的定义:在关系模式R (U) 中, 如果X→Y, Y→Z, Z不是Y的子集, Y不函数决定X, 则称Z对X传递函数依赖。
举例:在关系型数据库中,如果A字段决定B字段,B字段决定C字段,但C字段和A字段没有直接的关系,则认为C字段传递函数依赖于A字段。

在上图中,支队驻地表army_region不符合第三范式的定义。因为表中存在如下的传递函数依赖关系:

支队编号 -> 一二级地区 -> (地区负责单位、是否在海外)
(地区负责单位、是否在海外) -×- 支队编号

支队编号决定了一二级地区,一二级地区决定了负责单位和是否在海外;但是负责单位、是否在海外与支队编号没有直接的关系。所以应当创建一张地区管辖单位表来记录各个地区的具体管辖信息。重新规划依赖关系:

支队信息表:记录编号    支队编号 -> 人数、查询权限、建立日期
支队驻地表:记录编号   支队编号 -> 一二级地区
地区管辖单位表:记录编号 一级地区 -> 二级地区、管辖单位、是否为海外

表如下:army_info(支队信息表)、army_region(支队驻地表)、region_dirTbl(地区管辖单位表)

SQL语言介绍

结构化查询语言(Structured Query Language,SQL)是一种和关系型数据库进行通信,对数据进行增删改查的特殊编程语言。(注意:SQL不能用于非关系型数据库

SQL语言分为以下六大部分:

  • 数据定义语言(DDL),用于创建、修改、删除数据库对象及其属性
  • 数据操作语言(DML),用于增加、修改、删除对象内部数据
  • 数据查询语言(DQL),用于查询对象内部数据
  • 数据控制语言(DCL),用于控制用户权限等。
  • 事务控制命令(TCL),用于控制数据库事务的创建、提交、撤销、回滚等操作
  • 数据管理命令,用于审计数据库操作

下面列出了一些常见的SQL命令及其分类:

# DDL命令
CREATE TABLE    ALTER TABLE     DROP TABLE
CREATE INDEX    ALTER INDEX     DROP INDEX
CREATE VIEW     DROP VIEW       /* More... */
# DML命令
UPDATE   INSERT   DELETE
# DQL命令
INSERT
# DCL命令
GRANT   REVOKE
# TCL命令
COMMIT   ROLLBACK   SAVEPOINT   START TRANSACTION

主流数据库

随着互联网的发展,数据库的地位越来越重要。下面列出了一些知名的数据库:

名称 厂商 类型
MySQL 甲骨文 RDBMS
Oracle 甲骨文 RDBMS
Microsoft SQL Server 微软 RDBMS
MongoDB MongoDB公司 NoSQL
Redis Redis公司 NoSQL
PostgreSQL 加州大学伯克利分校 RDBMS

由于我国基础软件起步较晚,目前国产数据库还是难以和传统数据库竞争。下图列出了国产数据库Top 10排行榜:

不同厂商的数据库实现会在功能、SQL语言上有差异。

特别提醒:本文使用的数据库为MySQL。

数据库管理工具

为了对数据库进行高效管理,各大数据库厂商和第三方厂商都推出了自己的GUI数据库管理工具。相较于传统的命令行模式,美观的GUI管理工具可以更加直接、方便、事半功倍地管理数据库。

下面列出几种数据库管理工具:

1.Navicat Premium(强烈推荐)

2.DataGrip

3.phpMyAdmin(基于Web页面,开源)
4.MySQL Workbench

5.传统命令行管理工具

本文使用Navicat Premium作为数据库管理工具。

MySQL基础知识

MySQL基本架构

MySQL架构分为网络连接层、数据库服务层、存储引擎层、文件系统层

网络连接层

网络连接层提供与MySQL服务器建立连接的能力。各种编程语言(如:PHP、Python、Java、C++等)通过API接口与MySQL建立连接。(其实说白了就是客户端 )

数据库服务层

数据库服务层是MySQL服务器的核心,它的功能是管理连接接收并解析SQL语句生成具体的查询方案并进行初步查询和对整个MySQL服务器进行系统管理。数据库服务层分为以下六部分:

  • 连接池:以进程为单位来存储管理来自MySQL客户端的连接信息。
  • SQL接口:接收SQL语句并将其发送给解析器接收查询结果并将其返回至客户端。不然怎么会叫接口呢(~ ̄▽ ̄)~
  • 解析器:接收从接口发送的SQL语句并将其按照一定的机制解析为树形结构,判断SQL语句是否合法。如合法则将其发送至优化器,否则返回错误信息
  • 优化器:将解析器发送的“解析树”转化为执行计划,和存储引擎进行交互。
  • 缓存:记录一系列临时的查询结果,如表、记录、权限等缓存信息。MySQL进行查询时首先会查询缓存,如果能在缓存中查询成功就不必与存储引擎交互。这样可以大大节省查询时间和提高系统性能。
  • 系统管理工具:它可以提供对MySQL服务器进行备份、还原、权限控制等一系列运维功能。

存储引擎层

存储引擎:MySQL中的数据用各种不同的技术存储在文件或内存中,这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。这些存取数据的技术就叫存储引擎

MySQL有三种常见的存储引擎:InnoDB(默认)MyISAMMEMORY。它们负责以不同的方式(算法)对磁盘或内存数据进行写入和读取,所以存储引擎是MySQL实现数据存储的根本。

系统文件层

系统文件层是MySQL存放底层数据的部分,即物理磁盘或内存。该层主要存放了日志文件、数据与结构文件、配置文件、进程PID文件和Socket文件
下图展示了MySQL底层数据的存放。

MySQL存储引擎

前面已经介绍过,存储引擎是一系列用于存储和读取数据的技术实现。下面简单介绍三种常见的存储引擎:InnoDB、MyISAM、MEMORY

InnoDB

InnoDB存储引擎是目前最广泛使用的存储引擎。它支持外键、自动增长列、事务管理、并发控制和灾难恢复等优秀特性。在更新大数据表、精细事务控制与灾备方面,InnoDB是理想解决方案。它是MySQL5.5之后的默认存储引擎。它的缺点是读写性能稍差和占用存储空间较大。

MyISAM

MyISAM是MySQL 5.5之前的默认存储引擎。它的优点是存储空间小且性能优秀,但不支持事务处理。它支持静态、动态和压缩三种存储方式。

存储类型 启用条件 优缺点
静态 xTEXT、xBLOB、
VARCHAR

三种数据类型
优点:性能高
缺点:存储空间大
动态 xTEXT、xBLOB、
VARCHAR

三种数据类型
优点:空间小
缺点:性能低、易产生碎片
压缩 该表在整个
程序生命周期中都只读
优点:性能提升显著

它有以下三种文件类型:

  • frm文件:用于存储表结构。
  • MYD文件:用于存储数据。
  • MYI文件:用于存储索引。

MEMORY

MEMORY存储引擎将数据存储在内存中。它使用HASH索引,速度非常快;但表的大小受限,不支持VARCHAR、TEXT、BLOB三种数据类型,最重要的一点是重启进程后数据会丢失。因此,如果数据只是临时的且丢失后不会影响业务,可以使用MEMORY存储引擎,否则的话会…(我的老友啊,因为选错存储引擎让数据没了,气得内心崩溃,又哭又闹,呜呜呜呜,好可怜啊~ )

注:MEMORY存储引擎会将表结构以frm文件的形式存储在磁盘上,所以重启进程后只有表中的记录会丢失,表本身不会丢失。

三种存储引擎对比

模式与模式所有人

模式的定义:在MySQL中,模式是指与用户名相关联的,包含多个数据库对象的集合。这个用户名叫做模式所有人,模式中包含的数据库对象叫模式对象。一个模式中可以包含多个模式对象。

MySQL有三种模式,分别为:全局模式、外模式、内模式

全局模式

全局模式,又称逻辑模式、概念模式,它是数据库服务器中所有数据逻辑结构和特征的总体描述,即全局模式是数据库服务器中所有用户的公共视图一台数据库服务器只有一个全局视图

外模式(用户模式)

外模式,又称用户模式,它是数据库服务器中各个用户能查看的数据的逻辑结构和特征的总体描述。一台数据库服务器中可以有多个外模式,外模式在用户被创建时会自动被创建。

因为数据库对象(各个数据库表)与外模式相关联,所以一个数据库的真实名称为:外模式名+数据库名。如果一个用户想访问一个数据库,那么MySQL会先在指定的模式内(默认为自己)搜索指定的数据库如果无结果就会在其它模式中搜索该数据库,如果MySQL搜索到了数据库且该用户有权限访问目标模式,则访问成功,反之失败。下面举例说明:

假设我们有一台数据库服务器,服务器中现有两个普通用户:AmberEula,她们各有如下数据库:

Amber: work_DB, money_DB
Eula: work_DB, empolyee_DB, enemy_DB

如果用户Amber想访问数据库work_DB,那么她有以下两种方法:

# 方法一
USE work_DB;    // 因为Amber处在自己的模式中
# 方法二
USE Amber.work_DB;

如果Amber想访问Eula的数据库work_DB且有访问权限,那她只有一种方法(因为数据库同名):

USE Eula.work_DB;

如果Amber想访问Eulaenemy_DB,那么她有两种方法(因为Amber自己的模式中没有名为enemy_DB的数据库,那么MySQL会去其它模式中搜索):

USE enemy_DB;
USE Eula.enemy_DB;  // 个人建议访问其他用户的数据库时最好带上模式名

内模式

内模式,又称存储模式,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构,对应着实际存储在外存储介质上的数据库。一台数据库服务器只有一个内模式。

部署MySQL

在本地部署MySQL

系统环境:Windows Server 2019 Datacenter
硬件:2核心处理器,4GB内存(VMware)
版本:MySQL Community 8.0.31 下载链接

第一步

双击下载的MSI安装包,进入安装过程,选中 Developer Default,单击 Next。

第二步

选择安装目录,最好不要当C盘战士 ,选择完成后单击Next。

第三步

安装第三方依赖。如果需要使用Python或Visual Studio则可以安装。一般直接点Next。

第四步

直接点击Execute进行安装,完成后点击Next。

第五步

点击Next进入配置过程。在Config Type下拉栏中选择Development Computer,其它选项保持默认,单击Next。

第六步

密码认证方式一定要选择Use Legacy Authentication Method,否则可能造成无法登录。

第七步

设置root账户的登录密码。完成后点击Next。

第八步

Windows Service窗口内选项保持默认,点击Next。
Server File Permissions窗口内选项保持默认,点击Next。
Apply Configuration窗口点击Execute。
一路确认。

第九步

Connect To Server界面中输入自己设置的root账号密码,点击 Check,然后点击 Next。随后一路确认,安装完成。

使用云数据库服务

除了在服务器本地安装MySQL,还可以使用云服务厂商提供的云数据库服务。这里介绍阿里云的云数据库服务。

第一步

注册阿里云账号并完成实名认证,在首页点击 产品->数据库->云数据库 RDS MySQL版->立即购买进入选购页面。

第二步

根据企业实际情况配置云数据库性能和网络参数。

登录MySQL

使用本地终端登录

C:\Program Files\MySQL\MySQL Server 8.0\bin添加到系统Path变量之后,在终端输入如下命令登录本地MySQL(默认登录本机3306端口):

mysql -h <IP地址> -p <端口号,默认3306> -u <用户名> -p<刚才设置的密码>

使用Navicat登录

Navicat是一款非常方便的数据库管理工具。下面介绍如何使用它登录MySQL数据库。

第一步

安装Navicat。下载链接

第二步

打开Navicat,点击连接->MySQL打开新建连接窗口。输入连接名、主机(IP地址或域名)、端口、账户和密码,点击确定新建连接。

连接成功

超详细的MySQL入门教程(一)相关推荐

  1. 超详细的MySQL入门教程(四)

    MySQL:简单的增删改查 查询数据 基本语法介绍 打印任意值 查询表中全部数据 查询表中部分字段 限定条件查询 例1:查询编号值小于指定值的记录 例2:查询地址不等于某值的记录 例3:查询一级地址等 ...

  2. 超详细的MySQL入门教程(五)

    MySQL:运算符 基本知识 算术运算符 加法运算 减法运算 乘法运算 除法运算 求商.求余运算 比较运算符 数值大小比较 空值判断 数组判断 文本模式(正则)匹配 逻辑运算符 逻辑与(AND或&am ...

  3. 超详细的MySQL入门教程(三)

    MySQL:简单库表管理 一些基本概念 表 字段 约束 索引 视图 存储过程 触发器 事务 简单的数据库管理 查看并选择数据库 查看数据库创建语句 创建数据库 修改数据库 删除数据库 简单的数据表管理 ...

  4. 超详细的cmake入门教程【转载】

    这篇文章主要介绍了超详细的cmake入门教程,需要的朋友可以参考下 源出处 超详细的cmake入门教程 什么是cmake 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程 ...

  5. 超强、超详细Redis数据库入门教程

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  6. 超详细的TypeScript入门教程!

    在看这篇文章之前,我是强烈推荐TypeScript 入门教程这本书的.因为这本书它是:从 JavaScript 程序员的角度总结思考,循序渐进的理解TypeScript.文章来源也是该书,但听我一句话 ...

  7. 超详细Redis数据库入门教程

    [本教程目录] 1. redis是什么 2.redis的作者何许人也 3.谁在使用redis 4.学会安装redis 5.学会启动redis 6.使用redis客户端 7.redis数据结构 – 简介 ...

  8. python程序不出结果_超详细的Python入门教程,1小时就可以学会

    为什么使用Python 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是 ...

  9. python cocos2d新手教程_初学者必备!超详细Python基础入门教程

    相信初学Cocos2D者对Python还不熟悉,今天本篇教程带你快速入门,一小时学会Python. 1.为什么使用Python 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范 ...

最新文章

  1. ICRA2022 | OPV2V: 首个大型自动驾驶协同感知数据集+代码框架已开源
  2. android 释放so,在安卓项目里部署so文件你需要知道的知识
  3. ssm中shiro的使用
  4. 用习惯了windows系统要怎样去认识linux系统(一)
  5. WIN10下怎么找到MYSQL5.7数据库中存储数据的位置以及重装mysql数据复盘
  6. 构建项目时发生错误 - 错误:CS0006“... \ Assembly-CSharp-firstpass.dll”找不到
  7. Windows Mobile中的WebService应用
  8. FPGA定点数字信号处理技巧(一)
  9. html制作苹果手机屏幕,iphone怎么录屏幕点击动作(苹果手机的屏幕录制步骤)...
  10. opencv二值化代码实现
  11. Real Estate Photography: Exterior at Twilight 房地产摄影:暮光之城 Lynda课程中文字幕
  12. Keil 5安装教程,搭建单片机环境
  13. 成都中忻嘉业:抖音小店经营一段时间后能改类目吗
  14. Ringbuffer同步问题分析
  15. 服务器网卡bond配置指引
  16. BUUCTF:[GXYCTF2019]佛系青年
  17. 计算机EI检索论文,EI检索论文
  18. 无为无欲、与世无争,也就没有烦恼......
  19. 测试管理工具列表大全
  20. moocpython答案_中国大学慕课moocPython游戏开发入门答案

热门文章

  1. 常用的SSH、SCP命令格式
  2. 支持视音频和图片无线传屏以及屏幕镜像的Airplay的前世今生
  3. MPLS BGP 跨域方案(A/B/C(一)(二))
  4. 【python3】4.文件管理
  5. Python爬虫实现千千音乐歌曲爬取
  6. Java微服务2021面试题整理
  7. 综合模拟试题计算机指南,2018年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合历年真题及模拟试题详解...
  8. windows 命令行删除文件和文件夹
  9. 编程范式-结构化编程
  10. TPC-DS标准规范(6)