MySQL超详细学习教程,2023年硬核学习路线(一)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: MySQL超详细学习教程,2023年硬核学习路线(一)

前言


这是一篇 MySQL 通关一篇过硬核经验学习路线,包括数据库相关知识,SQL语句的使用,数据库约束,设计等。整理的初衷是为了记录自己的成长,同时帮助到需要学习和查看的朋友。


1. 数据库的相关概念


1.1 数据


数据是指数据库中存储的基本对象,是描述事物的符号记录。


1.2 数据库


数据库是指存放数据的仓库,长期存放在计算机内的有组织可共享的数据集合。


1.1.png


数据库技术解决了数据的持久化存储问题,同时利用数据库管理系统解决了对大量数据操作繁琐的问题。


1.3 数据库管理系统


数据库管理系统是指位于用户和操作系统之间的一层数据管理软件,科学的组织和存储,高效的获取和维护。


1.2.png


我们所说的 MySQL 数据库就是指 MySQL 数据库管理系统,在大家日常的使用习惯中把他叫做 MySQL 数据库。在我们的电脑安装好数据库管理系统软件以后就可以创建数据库来管理数据,同时也可以对数据库中的数据进行增删改查的操作。


1.4 数据库系统


数据库,数据库管理系统,应用程序和数据库管理员共同组成了数据库系统。


1.5 SQL


SQL的英文是 Structured Query Language,简称 SQL,是一种操作关系型数据库的结构化查询语言,我们在操作数据库时经常用到的操作就是查询操作。


SQL定义了操作所有关系型数据库的统一标准,可以使用 SQL 操作所有的关系型数据库管理系统,在使用其他的数据库管理系统时,也同样可以使用 SQL 来操作。


2. MySQL数据库


2.1 MySQL安装


MySQL有很多的安装方式,这里可以使用绿色版,避免了安装版的一些繁琐的操作,直接在官网下载与自己电脑相对应的版本的压缩文件,然后将压缩文件解压到一个非中文的目录中。


1.3.png


这里选择下载的产品版本是 5.7.24 ,原因是各个库支持的最完善且相对于最新版本更加的稳定。


2.2 MySQL配置


2.2.1 添加环境变量

1.4.png


右键此电脑 / 属性 / 高级系统设置 / 环境变量 ,在系统变量中新建变量,命名为 MYSQL_HOME,变量值为刚才 MySQL 的存放路径。


双击系统变量中的 Path,值为 %MySQL_HOME%\bin 。添加环境变量的方式与前面学习配置 Java 环境变量大致相同。


那么,我们为什么要先配置环境变量呢?


平时,我们在命令行窗口中输入一个可执行程序的命令时,Windows 会先在环境变量中的Path所指的路径中寻找,如果找到就直接执行,没找到就在当前工作目录中寻找,如果还没找到,就会报错。


我们添加环境变量的目的就是能够在任意路径下运行配置了环境变量的程序,而不用总是修改工作目录,大大简化了操作。


我们如何验证添加环境变量成功呢?


此时,我们只需要以管理员身份运行命令提示符工具,执行 mysql,如果提示 Can't connect to MySQL server on 'localhost',则环境变量添加成功。


注:此时必须以管理员身份运行命令提示符工具,否则会报错。


2.2.2 新建配置文件


在MySQl的根目录中创建一个配置文件 my.ini ,其内容为:


[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


主要目的是配置数据库的默认编码集为utf-8和默认存储引擎为INNODB。


2.2.3 初始化MySQL


在命令提示符窗口中运行mysqld --initialize-insecure,如果没有出现报错,则证明data目录初始化成功。


mysqld --initialize-insecure


此时当我们再打开查看MySQL目录,已经有data目录生成。


2.2.4 注册MySQL服务


在命令提示符窗口中运行 mysqld -install,此时你的电脑就成功注册了MySQL服务,此时你的电脑就可以称为MySQL服务器。


mysqld -install


2.2.5 启动MySQL服务


在命令提示符窗口中运行net start mysql,此时,我们已经成功启动MySQL服务。


net start mysql


运行net stop mysql即可停止MySQL服务。


net stop mysql


可以通过运行mysqladmin -u root password 1234修改默认账户密码,这里的1234指默认管理员(即root账户)的密码。


mysqladmin -u root password 1234


2.3 MySQL登录和退出


在命令行中运行mysql -uroot -p,按照提示输入密码 ,即登录成功。


mysql -uroot -p密码


登录命令中的参数:


mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)


退出MySQL时:


exit
quit


2.4 MySQL卸载


我们只需要简单的三步就可以完成MySQL的卸载:


第一步:运行net stop mysql


net stop mysql


第二步:运行mysqld -remove mysql


mysqld -remove mysql


第三步:删除MySQL目录及相关的环境变量。


2.5 MySQL数据模型


MySQl 是一个关系型数据库。关系型数据库是建立在关系模型基础上的数据库,简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库。


与关系型数据库对应的是非关系型数据库,关系型数据库有很多的优点,例如,都是使用表结构,格式一致,易于维护。使用通用的 SQL 语言操作,方便快捷,可用于复杂查询等。


1.5.png


我们通过客户端可以用数据库管理系统创建数据库,在数据库中创建表,在表中添加数据。创建的每一个数据库对应到磁盘上都是一个文件夹,而一个数据库下可以创建多张表,文件夹中的 .frm 就是表文件,.MYD是数据文件,通过这两个文件就可以查询到数据展示成二维表的效果。


3. SQL语句


3.1 SQL简介


SQL被称为结构化查询语言,可以用于对所有的关系型数据库进行操作,即我们可以通过SQL语句对数据库、表、数据进行增删改查操作。


SQL定义了操作关系型数据库的统一标准,但是,对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方。


3.2 通用语法


1.6.png


MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。


SQL 语句可以单行或多行书写,以分号结尾。


注释:


单行注释: – 注释内容 或 #注释内容(MySQL 特有)


多行注释: /* 注释 */


3.3 SQL分类


1.7.png


DDL: 数据定义语言,用来定义数据库对象:数据库,表,列等


DML: 数据操作语言,用来对数据库中表的数据进行增删改


DQL:数据查询语言,用来查询数据库中表的记录(数据)


DCL:数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户


数据是数据库中非常重要的部分,所以在日后的操作中我们最常进行的是对数据的一些操作,即对数据进行怎删改查,所以最常用操作的是 DML 和 DQL 。


总的来说DML用于对数据增删改,DQL用于对数据查询操作,DDL用于操作数据库,而DCL是用来控制权限。 SQL 的基本操作一般是指对数据库,数据表,数据的增删改查。


4. DDL- 操作数据库


首先要学习的是使用DDL来对数据库进行操作,主要是对数据库的增删改查操作。


4.1 查询


查询所有的数据库:


show databases;


例如:


1.8.png


4.2 创建数据库


创建新的数据库:


create database 数据库名称;


使用上面的方式创建新的数据库时,如果该数据库已经存在,则会出现错误,所以我们在创建新的数据库时一般会判断该数据库是否存在,如果已存在,则不会创建。


创建新的数据库(判断数据库是否已经存在):


create database if not exists 数据库名称;


例如:


1.9.png


4.3 删除数据库


删除数据库:


drop database 数据库名称;


和前面创建新的数据库相同,为了避免出现错误,我们一般会先判断该数据库是否存在,如果不存在,则不会删除。


删除数据库(判断数据库是否已经存在):


drop database if exists 数据库名称;


例如:


1.11.png


4.4 使用数据库


现在我们已经成功创建了新的数据库,接下来,我们要在数据库中创建数据表,首先我们要明白是对哪一个数据库进行操作,此时我们要先学会使用数据库,才能对数据库中的表进行操作。


使用数据库:


use 数据库名称;


查询当前正在使用的数据库:


select database();


例如:


1.12.png


5. DDL- 操作数据表


同样,对数据表的操作无非就是增删改查,在学习相关操作之前,我们先要熟悉一下MySQL的数据类型。


5.1 数据类型


MySQL支持多种数据类型,但是大致可以分为3中,分别是数值型,日期型和字符串型。下面是比较常用的几种数据类型:


数值:


数据类型

解释

tinyint

小整数型,占1个字节

int

大整数型,占4个字节

double

浮点类型


日期:


数据类型

解释

date

日期值,只包含年月日

datetime

混合日期和时间值,包含年月日时分秒


字符串:


数据类型

解释

char

定长字符串

varchar

变长字符串


定长字符串和变长字符串的区别:字符串是我们在数据库中经常使用的数据类型,使用变长字符串,如果字符的长度没有达到指定的长度,那么实际的长度是多少就占用几个字符,这样的做法显然是使用时间换空间,而使用定长字符串虽然有时会出现浪费空间的情况,但是一般储存性能比较高。


5.2 查询表

查询当前数据库下所有的表:


show tables;


查询表结构:


desc 表名称;


例如:


1.13.png


5.3 创建表


创建一个新的表:


create table 表名称(
    字段名1 数据类型,
    字段名2 数据类型,
    ...
    字段名n 数据类型  #这里是不需要加上,的
);


例如:


1.14.png


5.4 删除表


删除表:


drop table 表名;


删除表(判断表是否存在):


drop table if exists 表名;


例如:


1.15.png


5.5 修改表


修改表名:


alter table 表名 rename to 新的表名;


增加一列:


alter table 表名 add 列名 数据类型;


修改数据类型:


alter table 表名 modify 列名 新数据类型;


修改列名和数据类型:


alter table 表名 change 列名 新列名 新数据类型;


删除列:


alter table 表名 drop 列名;


例如:


1.16.png


6. 实战案例详解


需求:设计包含如下信息的学生表,请注重数据类型、长度的合理性。


编号

姓名,姓名最长不超过10个汉字

性别,因为取值只有两种可能,因此最多一个汉字

生日,取值为年月日

成绩,小数点后保留两位

地址,最大长度不超过 64

学生状态(用数字表示,正常、休学、毕业…)

在完成这样一个案例前,首先要创建一个学生数据库,在数据库中创建一张新的表,创建表时注意语法格式,数据类型和长度的合理性。


以管理员身份运行命令提示符cmd,启动Mysql服务,登录MySQL:


1.17.png


创建学生信息数据库:


create database if not exists student;

1.18.png


使用student数据库:


use student;

1.19.png


创建数据表:


create table stu(
  id int ,-- 编号
  name varchar(10),-- 姓名
  gender char(1),-- 性别
  birthday date,-- 生日
  score double(5,2) ,-- 分数
  addr varchar(50),-- 地址
  status tinyint-- 状态
);

1.20.png


现在,我们已经学会了写SQL来操作数据库,但是我们在命令行中写SQL时,往往有体验感差,效率低等问题,现在开始我们就要学习在MySQL的图形化客户端Navicat中执行SQL语句。


Navicat 为数据库管理、开发和维护提供了一款直观而强大的图形化界面,大大的提高了工作效率,建议在学习中也使用这款开发工具。接下来,在Navicat中新建数据库,新建查询,我们就可以编写SQL并且执行SQL语句了。


7. DML- 增删改数据


7.1 添加数据


给指定列添加数据:


insert into 表名(列名1,列名2...) values(值1,值2...);


给全部列添加数据:


insert into 表名 values(值1,值2...);


批量添加数据:


insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...),(值1,值2...)...;


批量添加数据(省略字段名):


insert into 表名 values(值1,值2...),(值1,值2...),(值1,值2...)...;


在开发过程中添加数据时是不建议省略字段名的,这样降低了代码的可读性,使效率下降。例如:


查询表中的所有数据的方法是:


select * from 表名;


后面会用到的。


需求:往下面的tb_user表中添加一条数据。


1.22.png


insert into tb_user(id,name) values(2,'李四');


添加成功:


1.23.png


7.2 修改数据


修改表的数据:


update 表名 set 列名1=值1,列名2=值2...[where 条件];


在修改数据时,也可以不使用where条件,此时的操作是修改整列数据,这样的操作是很危险的。


需求:把下面tb_user表中的张三的密码改为abc23


1.24.png


update tb_user set passwor d ='abc123' where name='张三';

修改成功:


1.25.png


7.3 删除数据


删除表的数据:


delete from 表名 [where 条件];


在删除某条数据时,如果不使用where条件,将会导致删除整个表的数据。


需求:删除tb_user表中的李四记录。


delete from tb_user where name='李四';


操作成功:


1.26.png

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
721 6
|
7月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1661 16
|
7月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
122 1
|
7月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
248 6
|
7月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
154 0
|
7月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
188 0
|
7月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
126 0
|
7月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
198 0
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
485 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

推荐镜像

更多