超详细的MySQL入门教程(一)

认识数据库

什么是数据库

数据库(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地址或域名)、端口、账户和密码,点击确定新建连接。

在这里插入图片描述

连接成功

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qwe304/article/details/127765119
今日推荐