Database:数据库原理初步与MySQL关系数据库安装与配置(非常详细)

数据库原理初步与MySQL关系数据库安装与配置

其中的所有代码都经本人运行以及比对结果过,不同结果也在文章中注明。
如有任何错误或侵权现象,请联系作者。
带颜色的是SQL语言代码和powershell命令提示符代码。
如果你只想安装MySQL,请直接从mysql安装开始。
此处感谢老吴小民的安装测试。
本教程的安装部分以windows为基础,Linux和MacOS请参考其他教程
配置过程中有任何问题欢迎后台留言哦


引入部分的内容参考廖雪峰老师的SQL教程

数据库引入

为什么需要数据库?

因为应用程序需要保存用户的数据,比如Word需要把用户文档保存起来,以便下次继续编辑或者拷贝到另一台电脑。

要保存用户的数据,一个最简单的方法是把用户数据写入文件。例如,要保存一个班级所有学生的信息,可以向文件中写入一个CSV文件:

id,name,gender,score
1,小明,M,90
2,小红,F,95
3,小军,M,88
4,小丽,F,88

如果要保存学校所有班级的信息,可以写入另一个CSV文件。

但是,随着应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了大问题:

  • 读写文件并解析出数据需要大量重复代码;
  • 从成千上万的数据中快速查询出指定数据需要复杂的逻辑。

如果每个应用程序都各自写自己的读写数据的代码,一方面效率低,容易出错,另一方面,每个应用程序访问数据的接口都不相同,数据难以复用。

所以,数据库作为一种专门管理数据的软件就出现了。应用程序不需要自己管理数据,而是通过数据库软件提供的接口来读写数据。至于数据本身如何存储到文件,那是数据库软件的事情,应用程序自己并不关心:

┌──────────────┐
│ application  │
└──────────────┘
       ▲│
       ││
   read││write
       ││
       │▼
┌──────────────┐
│   database   │
└──────────────┘

这样一来,编写应用程序的时候,数据读写的功能就被大大地简化了。


数据模型

数据库按照数据结构来组织、存储和管理数据,实际上,数据库一共有三种模型:

  • 层次模型
  • 网状模型
  • 关系模型

层次模型就是以“上下级”的层次关系来组织数据的一种方式,层次模型的数据结构看起来就像一颗树:

            ┌─────┐
            │     │
            └─────┘
               │
       ┌───────┴───────┐
       │               │
    ┌─────┐         ┌─────┐
    │     │         │     │
    └─────┘         └─────┘
       │               │
   ┌───┴───┐       ┌───┴───┐
   │       │       │       │
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│     │ │     │ │     │ │     │
└─────┘ └─────┘ └─────┘ └─────┘

网状模型把每个数据节点和其他很多节点都连接起来,它的数据结构看起来就像很多城市之间的路网:

     ┌─────┐      ┌─────┐
   ┌─│     │──────│     │──┐
   │ └─────┘      └─────┘  │
   │    │            │     │
   │    └──────┬─────┘     │
   │           │           │
┌─────┐     ┌─────┐     ┌─────┐
│     │─────│     │─────│     │
└─────┘     └─────┘     └─────┘
   │           │           │
   │     ┌─────┴─────┐     │
   │     │           │     │
   │  ┌─────┐     ┌─────┐  │
   └──│     │─────│     │──┘
      └─────┘     └─────┘

关系模型把数据看作是一个二维表格,任何数据都可以通过行号+列号来唯一确定,它的数据模型看起来就是一个Excel表:

┌─────┬─────┬─────┬─────┬─────┐
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
└─────┴─────┴─────┴─────┴─────┘

随着时间的推移和市场竞争,最终,基于关系模型的关系数据库获得了绝对市场份额。

为什么关系数据库获得了最广泛的应用?

因为相比层次模型和网状模型,关系模型理解和使用起来最简单。

基于数学理论的关系模型虽然讲起来挺复杂,但是,基于日常生活的关系模型却十分容易理解。我们以学校班级为例,一个班级的学生就可以用一个表格存起来,并且定义如下:

ID 姓名 班级ID 性别 年龄
1 小明 201 M 9
2 小红 202 F 8
3 小军 202 M 8
4 小白 201 F 9

其中,班级ID对应着另一个班级表:

ID 名称 班主任
201 二年级一班 王老师
202 二年级二班 李老师

通过给定一个班级名称,可以查到一条班级记录,根据班级ID,又可以查到多条学生记录,这样,二维表之间就通过ID映射建立了“一对多”关系。


数据类型

对于一个关系表,除了定义每一列的名称外,还需要定义每一列的数据类型。关系数据库支持的标准数据类型包括数值、字符串、时间等:

名称 类型 说明
INT 整型 4字节整数类型,范围约+/-21亿
BIGINT 长整型 8字节整数类型,范围约+/-922亿亿
REAL 浮点型 4字节浮点数,范围约+/-1038
DOUBLE 浮点型 8字节浮点数,范围约+/-10308
DECIMAL(M,N) 高精度小数 由用户指定精度的小数,例如,DECIMAL(20,10)表示一共20位,其中小数10位,通常用于财务计算
CHAR(N) 定长字符串 存储指定长度的字符串,例如,CHAR(100)总是存储100个字符的字符串
VARCHAR(N) 变长字符串 存储可变长度的字符串,例如,VARCHAR(100)可以存储0~100个字符的字符串
BOOLEAN 布尔类型 存储True或者False
DATE 日期类型 存储日期,例如,2018-06-22
TIME 时间类型 存储时间,例如,12:20:59
DATETIME 日期和时间类型 存储日期+时间,例如,2018-06-22 12:20:59

上面的表中列举了最常用的数据类型。很多数据类型还有别名,例如,REAL又可以写成FLOAT(24)。还有一些不常用的数据类型,例如,TINYINT(范围在0~255)。各数据库厂商还会支持特定的数据类型,例如JSON

选择数据类型的时候,要根据业务规则选择合适的类型。通常来说,BIGINT能满足整数存储的需求,VARCHAR(N)能满足字符串存储的需求,这两种类型是使用最广泛的。


主流关系数据库

目前,主流的关系数据库主要分为以下几类:

  1. 商用数据库,例如:OracleSQL ServerDB2等;
  2. 开源数据库,例如:MySQLPostgreSQL等;
  3. 桌面数据库,以微软Access为代表,适合桌面应用程序使用;
  4. 嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。

SQL(Structured Query Language)

什么是SQL?SQL是结构化查询语言的缩写,用来访问和操作数据库系统。SQL语句既可以查询数据库中的数据,也可以添加、更新和删除数据库中的数据,还可以对数据库进行管理和维护操作。不同的数据库,都支持SQL,这样,我们通过学习SQL这一种语言,就可以操作各种不同的数据库。

虽然SQL已经被ANSI组织定义为标准,不幸地是,各个不同的数据库对标准的SQL支持不太一致。并且,大部分数据库都在标准的SQL上做了扩展。也就是说,如果只使用标准SQL,理论上所有数据库都可以支持,但如果使用某个特定数据库的扩展SQL,换一个数据库就不能执行了。例如,Oracle把自己扩展的SQL称为PL/SQL,Microsoft把自己扩展的SQL称为T-SQL

现实情况是,如果我们只使用标准SQL的核心功能,那么所有数据库通常都可以执行。不常用的SQL功能,不同的数据库支持的程度都不一样。而各个数据库支持的各自扩展的功能,通常我们把它们称之为“方言”。

总的来说,SQL语言定义了这么几种操作数据库的能力:

DDL:Data Definition Language

DDL允许用户定义数据,也就是创建表、删除表、修改表结构这些操作。通常,DDL由数据库管理员执行。

DML:Data Manipulation Language

DML为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。

DQL:Data Query Language

DQL允许用户查询数据,这也是通常最频繁的数据库日常操作。


语法特点

SQL语言关键字不区分大小写!!!但是,针对不同的数据库,对于表名和列名,有的数据库区分大小写,有的数据库不区分大小写。同一个数据库,有的在Linux上区分大小写,有的在Windows上不区分大小写。

所以,我们约定:SQL关键字总是大写,以示突出,表名和列名均使


mysql安装与配置

官网下载地址

如果下载速度过慢我在下方提供了百度云链接

1.下载压缩包并解压

如果你的压缩包下载速度过慢,这里提供官方8.0.18版本的百度云链接:

链接:https://pan.baidu.com/s/1us23XvyZBGdl3tW1zO4dnw
提取码:47b6

解压放入D,E,F任意盘。(放到C盘的话,可能在修改ini文件时涉及权限问题)


2.配置环境变量

win+e–>此电脑–>右击属性–>高级系统设置–>环境变量

然后在path中新建并输入

%MYSQL_HOME%\bin

即先新建MYSQL_HOME=安装路径,再新增值 path=安装路径\bin


3.在安装路径(我的是E:\mysql-8.0.18-winx64)下创建my.ini文件

在这一步中,我们需要创建一个配置文件。

新建一个txt文件,将以下代码复制进文件,关闭后修改文件后缀为.ini。

ps: 如果你的文件不显示文件后缀(文件类型),我的电脑->查看->文件扩展名打勾,即可


以下是源代码,直接复制粘贴即可:

my.ini (配置文件的变量和值之间不能有空格) 【名称:my.ini 编码:ANSI】

#代码开始  
[Client]  

#设置3306端口  
port = 3306  

[mysqld]  

#设置3306端口  
port = 3306  

# 根据解压的具体地址设置mysql的安装目录  
basedir=E:/mysql-8.0.18-winx64

# 根据解压的具体地址设置mysql数据库的数据的存放目录  
datadir=E:/mysql-8.0.18-winx64/data

# 允许最大连接数  
max_connections=200  

# 服务端使用的字符集默认为8比特编码的latin1字符集  
character-set-server=utf8  

# 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB  

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
[mysql]  
# 设置mysql客户端默认字符集  

default-character-set=utf8  
#代码结束

4.管理员运行cmd进入安装目录\bin

一定要以管理员身份运行,因为mysql中可查看的数据库有系统数据库,修改mysql数据库需要有管理员的权限。

方法一:找到cmd.exe,右键以管理员身份运行

方法二:开始菜单右键->windowspowershell(管理员)

方法三:开始菜单搜索cmd->以管理员身份运行

如果您熟悉powershell请跳过以下代码块

#cmd命令提示符入门
cd..	#退出当前文件夹
cd "文件夹名"	#进入当前路径
dir	#查看当前文件夹下所有文件
C:	#进入C盘
D:	#进入D盘

如上图所示,进入bin目录后输入以下代码

mysqld install	#安装,产生MySQL服务

如果需要卸载的话(这步如果不是要卸载mysql则跳过)

mysql remove	#卸载,删除MySQL服务 [sc delete 服务名]

5.初始化data目录(两个命令二选一)

生成无密码的账户:(建议生成无密码的)

mysqld –initialize-insecure	#它会根据my.ini自动配置并生成无密码的root用户

或者

生成有密码的账户

mysqld --initialize --user=mysql --console	
#生成有初始密码的用户,初始化密码会显示在控制台

6.服务启动

启动服务:

net start mysql #启动mysql服务

停止服务(不需要在安装配置过程中输入)

net stop mysql #停止mysql服务
7.登录与退出

mysql -u root -p进入登录状态。

如果第5步使用的是mysqld –initialize-insecure,则直接回车;如果使用的是mysqld --initialize --user=mysql --console,则翻看cmd显示的初始化密码并输入,之后会教大家如何修改密码

如果忘记记初始化的密码,使用Notepad++打开err文件。

ctrl+F查找,找到带有root的那一行,查看初始化密码。

由于我选择的是生成无密码的账户,所以它告诉我是created with an empty password !

mysql -u root -p #进入登录状态并输入密码

退出mysql交互模式

-- 进入mysql后
exit	-- 退出mysql

如何运行我的MySQL

安装测试都成功后,退出控制台,下次要再进入MySQL,应该怎么做呢?

下面展示了初始化后之后每次进入mysql数据库的常规步骤

首先以管理员身份运行cmd.exe(不清楚这一步可以看上文的第4步)

假设我的安装路径是E盘(根据你自己的安装路径来)

C:\Windows\system32>E:	#换磁盘
E:\>cd mysql-8.0.18-winx64	#进mysql目录
E:\mysql-8.0.18-winx64>cd bin	#进可执行文件夹
E:\mysql-8.0.18-winx64\bin>net start mysql	#请求启动服务
E:\mysql-8.0.18-winx64\bin>mysql -u root -p	#输入请求登录命令
Enter password: *************	#输入自己的密码

------------------
进入mysql代码交互环境
------------------

mysql> exit	--退出
E:\mysql-8.0.18-winx64\bin>net stop mysql	#请求终止服务

在mysql中修改密码(其中的文件夹命令依据个人电脑)

1.管理员身份运行cmd,进入 安装mysql的bin目录

这一步不清楚参考上文mysql安装教程的第4步

E:\mysql-8.0.18-winx64\bin
2. 执行服务停止命令
net stop mysql	#停止mysql服务
3.执行免密码模式命令
mysqld --shared-memory --skip-grant-tables #进入免密码模式
4.重新打开一个 cmd.exe,同样是管理员账号进入mysql的bin目录
E:\mysql-8.0.18-winx64\bin
5.执行登录命令。

不输入密码,直接按回车登录,会成功登录 mysql

mysql -u root -p
6.执行命令刷新权限表

(刷新权限表,这一步必须操作,我就是没有操作这个步骤,重复了很多次修改都没有成功)

flush privileges;	#刷新权限表
7.执行输入新密码命令
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';	#输入你想输入的新密码
8.执行命令刷新权限表

(必须操作)

flush privileges; 	#刷新权限表
9.退出mysql

control +Z. (如果 exit 不行的话)。

exit;
10.测试新密码

重新管理员命令运行 cmd,进入 mysql 的bin 目录,执行命令

net start mysql #启动 mysql 服务

执行命令 mysql -u root -p,输入新密码,登录mysql 成功

mysql -u root -p #进入登录状态
发布了3 篇原创文章 · 获赞 11 · 访问量 1424

猜你喜欢

转载自blog.csdn.net/weixin_44979150/article/details/104364204
今日推荐