MySQL零基础详细讲解(基础部分)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL是一种关系型数据库管理系统(RDBMS),广泛用于储存和管理大量结构化数据。它是一个开源的数据库系统,由瑞典公司MySQL AB开发,后被Sun Microsystems收购,随后又被Oracle收购。MySQL以其高性能、稳定性和可靠性而闻名,并且易于使用和管理。它适用于各种规模的应用程序,从个人网站到大型企业级系统。MySQL使用SQL(Structured Query Language,结构化查询语言)来管理和查询数据,支持多个操作系统,并提供了许多客户端和编程语言的接口。无论是用于开发Web应用程序、商业应用程序还是其他类型的应用程序,MySQL都是一个常用的选择。

[TOC]

1、数据库的基本了解

数据库的介绍

  • 存储和管理数据的仓库
  • 英文单词为Database,简称DB
  • 数据中的数据是有组织的进行存储的
  • MySQL由瑞典MySQL AB公司开发,后来被Sum公司收购,Sum公司又被Oracle收购

数据库的优点

  • 永久保存
  • 通过SQL语句比较方便的操作数据库

2、MySQL安装

下载MySQL

搜索MySQL官网:MySQL :: Download MySQL Community Server

image-20231025071337396

点击下载

image-20231025140441919

下载完之后解压到自己想要存放的路径

记住你自己的存放路径

image-20231025141105889

创建my.ini文件

首先创建一个文本,填入下列内容,再将后缀名改成ini

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录,一定要与上面的安装路径保持一致
basedir=C:\\Program Files\\MySQL
# 设置mysql数据库的数据的存放目录,自动生成,无需手动创建,当然也可以放在其他地方
datadir=C:\\Program Files\\MySQL\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口,不建议修改,这是公认端口号
port=3306
default-character-set=utf8mb4

image-20231025141447053

初始化MySQL

win+r,输入cmd,在切换到你的MySQL目录下,==这里要管理员运行cmd==

cd C:\Program Files\MySQL\bin
mysqld --initialize --console

==注意复制临时密码==

image-20231025142013348

安装启动MySQL

mysqld --install  
net start mysql

image-20231025142337253

登录MySQL

mysql -u root -p刚才复制的密码

image-20231025142504479

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

image-20231025142550562

打开电脑添加环境变量

image-20231025142638841

将MySQL的路径添加进去就成功了

image-20231025142758144

3、MySQL登录

使用DOS命令行登录

#第一种
mysql -uroot -p123456

#第二种
mysql -uroot -p

#登录远程的MySQL
mysql -uroot -p123456 -h远程ip

==如果报错这个,说明密码错了==

mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

使用其他图形化软件登录

  • SQLyog
  • Navicat
  • DataGrip
  • 等等有很多

4、MySQL相关概念

数据库、表、数据的关系

  • MySQL服务器中可以创建多个数据库
  • 每个数据库可以存放多张表
  • 每个表可以存储多条数据记录

SQL的介绍

结构化查询语言,一门操作关系型数据库的编程语言。

定义操作所有关系型数据库的统一标准,每一个数据库操作方式可能会存在一些不同的地方。

image-20231025151604786

==通用语法规则:==

  1. SQL语句可以单行或者多行书写,以分号结尾
  2. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
  3. 单号注释:-- 注释内容 # 注释内容(MySQL特有)
  4. 多行注释: / 注释内容 /

5、DDL操作

==DDL (Data Definition Language):== 数据库定义语言,用来定义数据库对象:数据库,表,列等

5.1、DDL操作数据库

查询所有数据库

show databases;

创建数据库

-- 直接创建数据库db1,db2
create database db1;
create database db2;
-- 判断是否存在并创建数据库db2,db3
create database if not exists db3;

-- 判断是否存在并创建数据库db4
create database if not exists db4;

删除数据库

-- 删除db4数据库
drop database db4;
-- 判断数据库存在才删除db4,db3
drop database if exists db3;
drop database if exists db4;

使用(选中)数据库

-- 切换数据库到db1
use db1;
5.2、DDL操作表

创建表格

==创建表格格式:==

CREATE TABLE 表名(
    字段名 数据类型,
    字段名 数据类型,
    ...
    字段名 数据类型
);

常用的数据类型

int 整数类型
double 小数类型
varchar(长度) 字符串类型
data 日期类型:yyyy-MM-dd

创建表格

/*
创建商品表(goods)包含: 
    商品名称(name),
    商品价格(price),
    商品销量(sales_volume),
    商品生产日期(produced_date)
*/
create table goods(
    NAME VARCHAR(20),
    PRICE DOUBLE,
    SALES_VOLUME INT,
    PRODUCED_DATE DATE
);
/*
需求:设计一张学生表,请注重数据类型、长度的合理性
    编号,            整数
    姓名,            姓名最长不超过10个汉字
    性别,            因为取值只有两种可能,因此最多一个汉字
    生日,            取值为年月日
    入学成绩,        小数点后保留两位
    邮件地址,        最大长度不超过 64
    家庭联系电话,    不一定是手机号码,可能会出现 - 等字符,20位以内
*/

create table Student(
    ID int,
    NAME varchar(10),
    SEX char(1),
    BIRTHDAY date,
    SOCRE double(5,2),
    EMAIL varchar(64),
    PHONE varchar(20)
);

查看所有表

-- 查看db1数据库中的所有表
show tables;

查看表结构

-- 查看表结构
desc goods;

删除表

-- 直接删除表student表
drop table Student;

修改表名

-- 将goods改名成goods2
ALTER TABLE goods RENAME TO goods2;

增加新字段

-- 为goods2表添加一个新的字段img,类型为varchar(20)
ALTER TABLE goods2 ADD IMG VARCHAR(20);

修改字段数据类型

-- 将goods2表中的img字段的改成varchar(100)
ALTER TABLE goods2 MODIFY IMG varchar(100);

修改字段名和数据类型

-- 将goods2表中的img字段名改成icon,类型varchar(80)
ALTER TABLE goods2 CHANGE IMG ICON varchar(80);

删除某一字段

-- 删除goods2表中的字段icon
ALTER TABLE goods2 DROP ICON;

6、DML操作

==DML (Data Manipulation Language):== 数据操作语言,用来对数据库中表的数据进行增删改

6.1、DML新增数据

给指定添加数据

==格式:== insert into 表名 (字段一,字段二...) values (数据一,数据二...);

-- 插入数据, 给指定列添加数据 给goods表添加一条数据 NAME='格力空调', price=3699
-- 注意:在MySQL中字符串可以使用""或'', 建议''
insert into goods2(NAME,PRICE) values ('格力空调',3400);

-- 插入数据, 所有的字段名都写出来(少数做法)
-- 注意:日期使用''
insert into goods2(NAME, PRICE, SALES_VOLUME, PRODUCED_DATE) values('美的',3500,1000,'2023-10-26');

不写字段名插入所有数据

-- 插入数据, 插入所有字段不写字段名(常用做法)
-- '小米11', 4999, 300, '2021-03-22'
insert into goods2 values ('小米11', 4999, 300, '2021-03-22');

一次性插入多行数据

-- 扩展:一条SQL语句加入多条数据, VALUES 后面可以跟多个(), 一个()对应一条数据
-- 'iPhone 12', 6799, 12000, '2020-10-28'
-- 'DELL 7590', 8799, 300, '2019-06-18'
-- '立白洗衣粉', 12.9, 39000, '2018-02-13'
insert into goods2 values ('iPhone 12', 6799, 12000, '2020-10-28'),
                          ('DELL 7590', 8799, 300, '2019-06-18'),
                          ('立白洗衣粉', 12.9, 39000, '2018-02-13');

==注意:==

  1. 字段名和值的数量要对应
  2. 值的类型和字段类型要对应
  3. 除了数值类型,其他数据类型的数据都要加引号(单引号和双引号都行)
6.2、DML修改数据

==格式:== UPDATE 表名 SET 字段名=新的值 [WHERE 条件];

不带条件修改数据

-- 不带条件修改数据,将所有的price改成0  这样子会修改所有的price
update goods2 set PRICE = 0;

带条件修改

-- 带条件修改数据,把name为'华为P40'的商品price改成5999
update goods2 set PRICE = 4999 where NAME = '华为P40';

一次修改多列

-- 一次修改多个列,把name为'小米11'的商品price改成3999, sales_volume改成10000
update goods2 set PRICE = 3999 , SALES_VOLUME = 10000 where NAME = '小米11';
6.3、删除表中的数据

==格式:== DELETE FROM 表名 [WHERE 条件];

带条件删除数据

-- 带条件删除数据,删除name为'小米11'的数据
delete from goods2 where NAME = '小米11';

不带条件删除

-- 不带条件删除数据,删除表中的所有数据
delete from goods2;

7、DQL操作

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

7.1、DQL基础查询

查询指定字段

-- 查询goods2表中的 name 和 price 列
select NAME,price from goods2;

查询所有字段的数据

-- 细节:查询只是查看数据,不会修改表中数据
-- 查询goods2表中所有字段
select * from goods2;

去重查询

-- 去除重复查询: DISTINCT
select distinct NAME from goods2;

计算查询

-- 扩展:查询每个商品的销售额price * sales_volume
select price * sales_volume from goods2;

给查询列名取别名

-- 查询goods2表中的 name 和 price 列
-- name列的别名为 商品名称,price列的别名为 价格
select NAME as 商品名称 , price as 价格 from goods2;
7.2、DQL条件查询

==格式:== select 字段名 from 表名 where 条件;

条件查询

-- 查询price大于1000的商品
select * from goods2 where price > 1000;

-- 查询sales_volume小于5000的商品
select * from goods2 where sales_volume < 5000;

-- 查询price不等于6799的商品
select * from goods2 where price != 6799;

逻辑运算符

-- 逻辑运算符
-- 查询price大于1000且sales_volume小于500的商品(两个条件同时满足)
select * from goods2 where price > 1000 and sales_volume < 500;

-- 查询price大于8000 或 sales_volume小于100的商品(两个条件其中一个满足)
select * from goods2 where price > 8000 or sales_volume < 100;

-- 查询name是华为P40和小米11和米糊的商品
select * from goods2 where NAME = '华为P40' or NAME = '小米11' or  NAME = '米糊';

-- in: 在...里面,只要是满足()里面的数据都可以
-- 查询name是 华为P40 和 小米11 和 米糊 的商品
select * from goods2 where NAME in ('华为P40' , '小米11' , '米糊');

-- 扩展:查询name不是华为P40和小米11和米糊的商品
select * from goods2 where NAME not in('华为P40' , '小米11' , '米糊')

-- 范围: BETWEEN 值1 AND 值2 -- 表示从值1到值2范围,包头又包尾
-- 查询price大于等于1000,且小于等于5000的商品
select * from goods2 where price between 1000 and 5000;

-- 扩展:查询商品名称是null的商品
select * from goods2 where NAME is null;

-- 扩展:查询商品名称不是null的商品
select * from goods2 where NAME is not null;
7.3、DQL模糊查询

==格式:== select * from 表名 where 字段名 LIKE '通配符字符串'

MySQL通配符有两个

  • % :表示任意多个字符
  • _ : 表示一个字符

模糊查询

-- 模糊查询like
-- 查询米开头的商品
select * from goods2 where NAME like '米%';

-- 查询商品名称中包含'米'字的商品
select * from goods2 where NAME like '%米%';

-- 扩展:查询名称第二个字为米的商品
select * from goods2 where NAME like '_米';

-- 扩展:查询商品名称为4个字的
select * from goods2 where NAME like '____';
7.4、DQL查询排序

==格式:== select 字段名 from 表名 order by 列名 排序方式;

==排序方法==

  1. AES 升序
  2. DESC 降序

查询排序

/*  查询排序  */
-- order by 表示排序, ASC升序, DESC降序

-- 单列排序
-- 查询所有数据,使用price升序排序
select * from goods2 order by price ASC;

-- 查询所有数据,使用price降序排序
select  * from goods2 order by price DESC;

-- order by 默认是升序
select  * from goods2 order by price

-- 组合排序
-- 查询所有数据,在price降序排序的基础上,如果price相同再以sales_volume降序排序
select * from goods2 order by price DESC,sales_volume DESC;
7.5、DQL复杂查询-聚合函数

五个聚合函数

  1. count:统计指定列记录数
  2. sum:计算指定列的数值和
  3. max:计算指定列的最大值
  4. min:计算指定列的最小值
  5. avg:计算指定列的平均值

==格式:== SELECT 聚合函数(字段) FROM 表名;

代码演示

-- 查询商品个数, COUNT统计时会忽略NULL值
select count(NAME) from goods2;

-- COUNT最好的处理方式, *表示所有列理解为统计行数,最准确
select count(*) from goods2;

-- 扩展用法:统计price大于1000的总个数
select count(*) from goods2 where price > 1000;

-- 查询所有商品总销量
-- 总销量是把所有商品的销量加起来
select sum(sales_volume) from goods2;

-- 查询销量最高的商品
select max(sales_volume) from goods2;

-- 查询商品平均价格
select avg(price) from goods2;

-- 扩展:让小数显示指定的位数(2位)
-- ROUND(数据, 小数位数)
select round(avg(price),2) from goods2;
7.6、DQL复杂查询-分组查询

==格式:== select 字段名 from 表名 group by 字段名;

代码演示

/*  分组查询  */
-- 按商品类型分组
select category from goods2 group by category;

-- 查询每种类型的商品数量
select category,count(*) as '数量' from goods2 group by category;

-- 查询销量大于100的商品,按商品类型分组,统计每组的数量,并只显商品类型数量大于2的数据
-- having 也是用来筛选的,但是一般都是分组后和聚合函数一起用
select category,count(*) from goods2 where sales_volume > 100 group by category having count(*) > 2;
7.7、DQL复杂查询-分页查询

LIMIT

  • LIMIT是限制的意思,作用是获取部分查询的数据
  • ==格式:== select * from 表名 LIMIT offset,length
    • offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0
    • length是只需要显示的总记录数

代码演示

-- 假设我们一每页显示3条记录的方式来分页,SQL语句如下:
-- 第一页: 跳过0条, 获取3条, 如果跳过的条数是0,offset可以省略
select * from goods2 limit 3;

-- 第二页: 跳过3条, 获取3条
select * from goods2 limit 3,3;

-- 第三页: 跳过6条, 获取3条
select * from goods2 limit 6,3;

-- 第四页: 跳过9条, 获取3条
select * from goods2 limit 9,3;

-- 如何实现动态呢,我们不能一直去写sql语句实现固定
-- 计算公式:起始索引 = (当前页码-1)  *  每页显示的条数
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
前端开发 Java 数据库连接
JavaWeb:登录注册功能实现
JavaWeb 登录注册是一种常见的网站开发功能,使用 Java 编程语言和 Web 技术来实现用户注册和登录功能
387 3
|
前端开发
css 实现 title的效果,并且自己写修改类似title样式
css 实现 title的效果,并且自己写修改类似title样式
css 实现 title的效果,并且自己写修改类似title样式
|
搜索推荐 算法 数据挖掘
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
|
存储 分布式计算 Hadoop
HadoopCPU、内存、存储限制
【7月更文挑战第13天】
641 14
|
JSON JavaScript API
「AIGC」NodeJs使用openai流式请求与非流式请求
本文档是关于使用Node.js与OpenAI API交互的教程,涵盖了非流式和流式请求。非流式请求示例展示了如何一次性返回所有数据,适用于兼容性但可能需要较长时间。流式请求则演示了如何即时响应数据,提高交互体验,但可能不适用于所有系统。代码示例使用了axios库和http模块,展示了如何处理数据流。
850 0
|
存储 NoSQL 网络协议
PG内核解读-第1节PostgreSQL系统概述
本文整理自阿里云数据库开源社区Maintainer于巍(花名漠雪),在PostgreSQL数据库内核解读系列的分享。本篇内容主要分为四个部分: 1. 本系列教程介绍 2. PostgreSQL概述(历史、架构) 3. PostgreSQL安装启动 4. PostgreSQL常用命令、调试
PG内核解读-第1节PostgreSQL系统概述
ly~
|
11月前
|
存储 Oracle 关系型数据库
数据库的优点和缺点分别是什么?
### 数据库的优点与缺点 数据库具有高数据共享性,允许多用户和多应用同时访问,提升信息流通效率。其数据一致性通过约束机制和事务管理保障,确保数据完整无误。数据库具备强数据独立性,改变存储结构或逻辑结构对应用影响小。此外,用户权限管理和数据加密提升了数据安全性。 然而,数据库也存在成本高的问题,包括软件购买与维护费用及高性能硬件需求。大规模数据处理可能导致性能瓶颈,尤其是在高并发场景下。数据迁移复杂,尤其是不同数据库系统间或版本升级时,需处理数据结构和语法差异。
ly~
1242 2
|
存储 弹性计算 人工智能
【阿里云弹性计算】AI 训练与推理在阿里云 ECS 上的高效部署与优化
【5月更文挑战第25天】阿里云ECS为AI训练和推理提供弹性、可扩展的计算资源,确保高性能和稳定性。通过灵活配置实例类型、利用存储服务管理数据,以及优化模型和代码,用户能实现高效部署和优化。自动伸缩、任务调度和成本控制等策略进一步提升效率。随着AI技术发展,阿里云ECS将持续助力科研和企业创新,驱动人工智能新时代。
336 0