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

本文详细介绍了MySQL的基础知识,包括数据库的概念、安装步骤、DML(数据操作语言)如新增、修改、删除数据,以及DQL(数据查询语言)如基础查询、条件查询、分组和分页。涵盖了DDL(数据定义语言)创建数据库和表的示例。
摘要由CSDN通过智能技术生成

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)  *  每页显示的条数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林学习编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值