当前位置: 首页 > news >正文

MySQL基本查询与数据操作全面解析

目录

1. CRUD操作概述

2. Create操作详解

2.1 表的创建

2.2 单行数据插入

2.3 多行数据插入

2.4 插入冲突处理

3. Retrieve操作详解

3.1 基础查询

全列查询(慎用)

指定列查询

表达式查询

结果去重

3.2 条件查询(WHERE子句)

比较运算符

逻辑运算符

NULL处理

3.3 结果排序(ORDER BY)

3.4 分页查询(LIMIT与OFFSET)

4. Update操作详解

4.1 单字段更新

4.2 多字段更新

4.3 基于表达式更新

5. Delete操作详解

5.1 删除指定数据

5.2 清空表数据

6. 高级查询技巧

6.1 聚合函数

6.2 GROUP BY与HAVING

7. 实战案例解析

案例1:去重插入

案例2:分页查询

8. 总结与最佳实践


1. CRUD操作概述

CRUD是数据库操作的四大核心功能:

  • Create(创建):插入数据

  • Retrieve(读取):查询数据

  • Update(更新):修改数据

  • Delete(删除):删除数据

本文将通过丰富的代码示例,详细解析MySQL中CRUD的实现方式及注意事项。


2. Create操作详解

2.1 表的创建

通过CREATE TABLE语句定义表结构。

CREATE TABLE students (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,sn INT NOT NULL UNIQUE COMMENT '学号',name VARCHAR(20) NOT NULL,qq VARCHAR(20)
);
  • 字段说明

    • id:主键,自增,无符号整数。

    • sn:唯一学号,不可为空。

    • name:姓名,长度限制为20字符。

    • qq:QQ号,可为空。

2.2 单行数据插入

全列插入时,需按表定义的列顺序提供所有值:

INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
  • 注意事项

    • 若省略自增主键(如id),MySQL会自动填充。

    • 必须保证值的顺序与表结构完全一致。

2.3 多行数据插入

指定列插入,适用于部分字段赋值:

INSERT INTO students (id, sn, name) VALUES(102, 20001, '曹孟德'),(103, 20002, '孙仲谋');
  • 优势:批量插入提升效率,减少数据库连接开销。

2.4 插入冲突处理

当主键或唯一键冲突时,使用ON DUPLICATE KEY UPDATE进行更新:

INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';
  • 返回值说明

    • 0 rows affected:冲突数据与更新值相同。

    • 1 row affected:插入新数据。

    • 2 rows affected:更新冲突数据。

或使用REPLACE直接替换冲突记录:

REPLACE INTO students (sn, name) VALUES (20001, '曹阿晴');
  • 注意REPLACE会删除原记录后插入新数据,可能导致自增ID不连续。


3. Retrieve操作详解

3.1 基础查询

全列查询(慎用)
SELECT * FROM exam_result;
  • 缺点:传输数据量大,可能影响索引性能。

指定列查询
SELECT id, name, english FROM exam_result;
表达式查询

计算总分并指定别名:

SELECT name, chinese + math + english AS 总分 FROM exam_result;
结果去重
SELECT DISTINCT math FROM exam_result;

3.2 条件查询(WHERE子句)

比较运算符
-- 英语不及格的同学
SELECT name, english FROM exam_result WHERE english < 60;-- 语文成绩在80到90分之间
SELECT name, chinese FROM exam_result 
WHERE chinese BETWEEN 80 AND 90;
逻辑运算符
-- 姓孙且不叫孙某的同学
SELECT name FROM exam_result 
WHERE name LIKE '孙%' AND name NOT LIKE '孙_';
NULL处理
-- 查询QQ号已知的同学
SELECT name, qq FROM students WHERE qq IS NOT NULL;

3.3 结果排序(ORDER BY)

-- 按数学成绩降序,英语成绩升序
SELECT name, math, english FROM exam_result 
ORDER BY math DESC, english ASC;

3.4 分页查询(LIMIT与OFFSET)

-- 每页3条数据,查询第2页
SELECT * FROM exam_result 
ORDER BY id LIMIT 3 OFFSET 3;
  • 注意OFFSET起始位置从0开始。


4. Update操作详解

4.1 单字段更新

UPDATE exam_result SET math = 80 WHERE name = '孙悟空';

4.2 多字段更新

UPDATE exam_result SET math = 60, chinese = 70 
WHERE name = '曹孟德';

4.3 基于表达式更新

-- 总成绩倒数前三的数学成绩加30分
UPDATE exam_result SET math = math + 30 
ORDER BY chinese + math + english LIMIT 3;

5. Delete操作详解

5.1 删除指定数据

DELETE FROM exam_result WHERE name = '孙悟空';

5.2 清空表数据

  • DELETE:逐行删除,可回滚,保留自增计数。

    DELETE FROM for_delete;

  • TRUNCATE:直接清空表,不可回滚,重置自增ID。

    TRUNCATE TABLE for_truncate;

6. 高级查询技巧

6.1 聚合函数

-- 统计数学成绩总分
SELECT SUM(math) FROM exam_result;-- 计算平均总分
SELECT AVG(chinese + math + english) AS 平均总分 FROM exam_result;

6.2 GROUP BY与HAVING

-- 按部门统计平均工资
SELECT deptno, AVG(sal) FROM EMP GROUP BY deptno;-- 筛选平均工资低于2000的部门
SELECT deptno, AVG(sal) AS avg_sal FROM EMP 
GROUP BY deptno HAVING avg_sal < 2000;

7. 实战案例解析

案例1:去重插入

-- 创建临时表并插入去重数据
CREATE TABLE no_duplicate_table LIKE duplicate_table;
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table;
RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;

案例2:分页查询

-- 按ID分页,每页3条
SELECT * FROM exam_result ORDER BY id LIMIT 3 OFFSET 6;

8. 总结与最佳实践

  1. 避免全列查询:减少数据传输量,提升性能。

  2. 谨慎使用UPDATE/DELETE:操作前备份数据,或添加LIMIT限制。

  3. 合理使用索引:WHERE和ORDER BY字段建立索引可加速查询。

  4. 事务管理:批量操作时开启事务,确保数据一致性。

通过本文的系统学习,读者可掌握MySQL核心操作,应对日常开发中的各类数据管理需求。

相关文章:

  • C++抽象基类定义与使用
  • 第四届商师校赛 web 1
  • Varjo-XR3在UE5中,头显中间有一个方块一直显示
  • 深度学习 从入门到精通 day_05
  • 学 Python 需要安装哪些软件?全面工具指南
  • C语言教程(十二):C 语言数组详解
  • Linux mmp文件映射补充(自用)
  • AlmaLinux 9.5 调整home和根分区大小
  • CSS在线格式化 - 加菲工具
  • 推公式——耍杂技的牛
  • CH585的不升级蓝牙协议栈的备份OTA升级的几个文件解析
  • 《AI大模型应知应会100篇》 第33篇:大模型在法律文档处理中的应用
  • 图片转base64 - 加菲工具 - 在线转换
  • 华为存储5300V5升级补丁
  • 二、Python编程基础02
  • 3.1.2 materialDesign:Card 的使用介绍
  • AI数字人:元宇宙舞台上的闪耀新星(7/10)
  • 安装 vmtools
  • JETBRAINS USER AGREEMENT【2025.4.16】更新用户许可协议
  • 2.6 递归
  • 马上评丨电子屏不如黑板?解决问题不能靠怀旧
  • 北京市交通委通报顺平路潮白河大桥事故直接原因
  • 男粉丝咬伤女主播嘴后写的条子引争议:赔偿“十万元”还是“十5元”?
  • 神舟二十号载人飞行任务新闻发布会将于4月23日上午召开
  • 新闻1+1丨“龟速”行驶要治理,还要治什么?
  • 上海一小学百名学生齐聚图书馆:纸质书的浪漫AI无法取代