MySQL基础入门

MySQL 基础入门笔记,涵盖 DDL 数据定义、DML 数据操纵与 DQL 数据查询三大核心板块。


一、连接 MySQL

安装好 MySQL 后,打开命令行终端,输入以下命令连接数据库:

sql 复制代码
mysql -u root -p
  • -u 指定用户名(root 是超级管理员)
  • -p 表示需要输入密码

连接成功后会出现 mysql> 提示符。退出输入:

sql 复制代码
exit;

二、数据库与表的基本操作(DDL)

DDL(Data Definition Language)用于定义和管理数据库结构:库、表、字段

2.1 数据库操作

操作 SQL 语句 说明
查看所有库 show databases; 列出当前 MySQL 中所有数据库
进入库 use 数据库名; 切换到指定数据库
创建库 create database 数据库名; 新建一个数据库
删除库 drop database 数据库名; 危险操作,删除整个库

2.2 表操作

操作 SQL 语句 说明
查看当前库所有表 show tables; 列出当前库下的所有表
创建表 create table 表名 (字段定义...); 必须定义字段结构
删除表 drop table 表名; 危险操作,表和数据一起删除

2.3 常用数据类型

类型 说明 示例
int 整数 int, int unsigned
varchar(n) 变长字符串,最多 n 个字符 varchar(40)
decimal(m,n) 定点小数,m 总长度,n 小数位 decimal(10,2)
float / double 浮点数(不精确) float

2.4 字段约束

约束 说明
primary key 主键,唯一标识一条记录
unsigned 无符号(非负)
auto_increment 自动递增,常用于主键
not null 不允许为空
default 默认值

2.5 建表综合示例

sql 复制代码
create table test1 (
    pid int unsigned primary key auto_increment,
    pname varchar(40),
    price decimal(10,2),
    num int
);

字段说明:

字段 含义 类型与约束
pid 商品主键 id 无符号整数,自动递增
pname 商品名称 最长 40 个字符
price 商品价格 总长 10 位,小数保留 2 位
num 商品库存数量 整数

三、数据增删改(DML)

DML(Data Manipulation Language)用于操作表中的数据:插入、更新、删除

3.1 插入数据 insert

向表中添加新记录:

sql 复制代码
insert into 表名 (字段1, 字段2, ...) values (值1, 值2, ...);

示例:

sql 复制代码
insert into products (name, price, stock) values ('平板电脑', 2999.00, 50);
insert into customers (name, phone, city) values ('小红', '13999999999', '杭州');

3.2 更新数据 update

修改表中已有的记录。一定要加 where 条件! 否则会更新整张表。

sql 复制代码
update 表名 set 字段1 = 新值1, 字段2 = 新值2 where 条件;

示例:

sql 复制代码
-- 将 id=1 的商品价格改为 5499
update products set price = 5499 where id = 1;

-- 将无线鼠标的库存增加 50
update products set stock = stock + 50 where name = '无线鼠标';

危险操作提醒: 如果 update 不加 where 条件,会修改表中 所有行 的该字段值!

3.3 删除数据 delete

从表中删除记录。同样一定要加 where 条件!

sql 复制代码
delete from 表名 where 条件;

示例:

sql 复制代码
-- 删除 id=10 的商品(name 为 null 的那条)
delete from products where id = 10;

-- 删除所有库存为 0 的商品(谨慎!)
delete from products where stock = 0;

** 危险操作提醒:** delete from 表名 不加 where 会 清空整张表

delete vs drop 区别:

  • delete 删除 数据,表结构还在
  • drop 删除 整张表(结构和数据都没了)

四、数据查询(DQL)

DQL(Data Query Language)用于从表中查询数据,核心是 select 语句。

4.1 比较运算符

运算符 含义 示例
> 大于 where num > 10
< 小于 where num < 10
>= 大于等于 where num >= 10
<= 小于等于 where num <= 10
= 等于 where num = 10
!=<> 不等于 where num != 10
sql 复制代码
select * from test.test1 where num >= 10;
select * from test.test1 where num != 10;

4.2 null 值判断

注意: null 不能使用 =!= 判断,必须用 is null / is not null

sql 复制代码
select * from test.test1 where pname is null;
select * from test.test1 where pname is not null;

4.3 范围查找

运算符 含义 示例
between x and y [x, y] 闭区间内 where pid between 2 and 8
not between x and y 不在 [x, y] 区间内 where pid not between 2 and 8
sql 复制代码
select * from test.test1 where pid between 2 and 8;
select * from test.test1 where pid not between 2 and 8;

4.4 集合查询

sql 复制代码
-- 匹配集合内任意一个值
select * from test.test1 where pid in (1, 3, 9);

-- 不在集合内
select * from test.test1 where pid not in (1, 3, 9);

4.5 模糊查询(like)

通配符 % 代表 任意数量 的任意字符。

模式 含义 示例
'x%' 以 x 开头 where pname like '苹%'
'%x' 以 x 结尾 where pname like '%机'
'%x%' 包含 x where pname like '%手%'
sql 复制代码
select * from test.test1 where pname like '%手%';

4.6 排序

对查询结果按指定字段排序:

sql 复制代码
-- 升序(asc 可省略,默认升序)
select * from test.test2 order by num asc;

-- 降序(desc 不可省略)
select * from test.test2 order by num desc;

4.7 聚合函数

对整张表的数据做统计计算,每类只返回 一条 统计结果。

函数 作用 示例
max(字段) 获取最大值 select max(num) from test.test2;
min(字段) 获取最小值 select min(num) from test.test2;
avg(字段) 计算平均值(忽略 null) select avg(num) from test.test2;
sum(字段) 计算总和 select sum(num) from test.test2;
count(字段) 统计非空行数 select count(num) from test.test2;
count(*) 统计总行数(含 null) select count(*) from test.test2;
sql 复制代码
select max(num) as '最大值' from test.test2;
select min(num) as '最小值' from test.test2;
select avg(num) as '平均值' from test.test2;
select sum(num) as '总和' from test.test2;
select count(num) as '非空数量' from test.test2;
select count(*) as '总行数' from test.test2;

count(字段) vs count(*) 区别:

  • count(字段) --- 只统计该字段 有值(非 null) 的行
  • count(*) --- 统计 全部行数,哪怕某字段为 null 也会计入

4.8 多表关联(join)

关联两张及以上数据表,通过匹配条件合并多表数据。

三种关联方式对比
关联类型 关键字 行为
内关联 inner join 只保留匹配成功的数据,两边不匹配的 全部舍弃
左关联 left join 左表数据 全部保留,右表无匹配补 null
右关联 right join 右表数据 全部保留,左表无匹配补 null
sql 复制代码
-- 内关联:只展示能匹配上的数据
select * from test.test1 as a
inner join test.test2 as b on a.pid = b.pid;

-- 左关联:左表 test1 全部保留
select * from test.test1 as a
left join test.test2 as b on a.pid = b.pid;

-- 右关联:右表 test2 全部保留
select * from test.test1 as a
right join test.test2 as b on a.pid = b.pid;

小提示: as 关键字用于给表起别名,可以省略直接写 test1 a

4.9 分组与过滤(group by / having)

将查询数据按指定字段归类,相同字段值的行合并为同一组。常搭配聚合函数实现分组维度的统计。

group by --- 按指定字段分组:

sql 复制代码
-- 统计每个城市的顾客数
select city, count(*) as '人数' from customers group by city;

having --- 对分组后的结果做条件过滤。where 在分组前筛选行,having 在分组后筛选组,where 无法替代 having

关键字 过滤时机 能否用聚合函数
where 分组 ,过滤行 不能
having 分组 ,过滤组 可以
sql 复制代码
-- 筛选顾客数大于 1 的城市(having 过滤组)
select city, count(*) as '人数'
from customers
group by city
having count(*) > 1;

执行顺序wheregroup byhavingorder by

4.10 时间函数

用于处理日期、时间类型的数据,支持时间获取、字段提取、日期运算、差值计算等。

常用时间数据类型
类型 说明 示例
date 年月日 '2002-12-17'
time 时分秒 '12:30:45'
datetime 年月日时分秒 '2002-12-17 12:30:45'
获取当前时间
sql 复制代码
select now();      -- 当前日期+时间:2002-12-17 12:30:45
select sysdate();  -- 当前日期+时间(同 now)
select curdate();  -- 当前日期:2002-12-17
select current_date;  -- 同上
select curtime();  -- 当前时间:12:30:45
select current_time;  -- 同上
时间提取函数
函数 作用 示例
year(日期) 提取年 year('2002-12-17') → 2002
month(日期) 提取月 month('2002-12-17') → 12
day(日期) 提取日 day('2002-12-17') → 17
hour(时间) 提取小时 hour('12:30:45') → 12
minute(时间) 提取分钟 minute('12:30:45') → 30
second(时间) 提取秒 second('12:30:45') → 45
quarter(日期) 提取季度(1-4) quarter('2002-12-17') → 4
week(日期) 当年第几周 week('2002-12-17')
dayofyear(日期) 当年第几天 dayofyear('2002-12-17')
sql 复制代码
select year('2002-12-17'), month('2002-12-17'), day('2002-12-17');
select hour('12:30:45'), minute('12:30:45'), second('12:30:45');
select quarter('2002-12-17'), week('2002-12-17'), dayofyear('2002-12-17');

-- 业务示例:查询订单的下单月份
select id, total, month(order_date) as '下单月份' from orders;
日期加减
sql 复制代码
-- 增加:date_add(基准日期, interval 数值 单位)
select date_add('2002-12-17', interval 1 day);   -- 2002-12-18
select date_add('2002-12-17', interval 1 month); -- 2003-01-17
select date_add('2002-12-17', interval 1 year);  -- 2003-12-17

-- 减少:date_sub(基准日期, interval 数值 单位)
select date_sub('2002-12-17', interval 1 day);   -- 2002-12-16
select date_sub('2002-12-17', interval 1 month); -- 2002-11-17
select date_sub('2002-12-17', interval 1 year);  -- 2001-12-17
时间差计算
sql 复制代码
-- 天数差:datediff(前日期, 后日期)
select datediff('2006-12-17', '2002-12-17');  -- 1461(天)

-- 单位时间差:timestampdiff(单位, 后日期, 前日期)
select timestampdiff(year, '2002-12-17', '2006-12-17');   -- 4(年)
select timestampdiff(month, '2002-12-17', '2006-12-17');  -- 48(月)
select timestampdiff(day, '2002-12-17', '2006-12-17');   -- 1461(天)
格式化日期
sql 复制代码
-- date_format(日期, '格式'),%Y四位年 %m两位月 %d两位日
select date_format(order_date, '%Y年%m月%d日') as '下单日期' from orders;

4.11 子查询

子查询是嵌套在 SQL 语句中的查询,先执行内层,结果给外层用:

sql 复制代码
-- 标量子查询:查询价格高于平均价的商品
select * from products
where price > (select avg(price) from products);

-- 子查询 + in:有下过单的顾客
select * from customers
where id in (select distinct customer_id from orders);

五、总结

分类 核心操作 关键字/语法
连接 登录/退出 mysql -u root -p / exit;
DDL 库操作 create database / drop database / use / show databases
DDL 表操作 create table / drop table / show tables
DML 插入 insert into ... values ...
DML 更新 update ... set ... where ...
DML 删除 delete from ... where ...
DQL 基础查询 select ... from ... where ...
DQL 条件 = != > < >= <= is null between in like
DQL 排序 order by ... asc / desc
DQL 分组过滤 group by ... having ...
DQL 聚合 max() min() avg() sum() count()
DQL 日期时间函数 now() year() month() date_add() datediff()
DQL 子查询 嵌套 select
DQL 多表 inner join left join right join ... on ...

此为 MySQL 基础篇,适合零基础入门和基础复习。

相关推荐
海兰8 小时前
【实用程序】网页公开信息智能采集系统详细设计指南
人工智能·学习·自动化·采集信息
MartinYeung58 小时前
[论文学习]AgentDAM:自主Web Agent的隐私泄露评估
学习
CoderYanger8 小时前
A.每日一题:3020. 子集中元素的最大数量
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
qetfw9 小时前
CentOS 7 搭建 MariaDB 数据库服务
linux·数据库·centos·mariadb
光影6279 小时前
MySQL 进阶篇 —— 事务 / 外键 / 索引 / 高级查询
数据库·笔记·sql·学习·mysql
爬也要爬着前进9 小时前
redis哨兵模式搭建
数据库·redis·bootstrap
小月土星9 小时前
(实战篇)RAG-demo 深度解析:162行代码中的检索增强生成全景 (含Top-k法)
javascript·数据库·llm
晴雨天️10 小时前
Git工具使用指南
笔记·git
醉城夜风~10 小时前
MyBatis 基础CRUD全套实战学习笔记
笔记·学习·mybatis