【MySQL必知必会】数据库操纵语言(DML)超全总结:增删改查一文搞定!

一、DML简介

数据库操纵语言(Data Manipulation Language, DML) 是SQL的核心组成部分,主要用于对数据库中的数据进行增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT) 操作,掌握DML都是必备技能!

二、核心操作详解

1. 插入数据:INSERT

-- 插入单条数据(全字段)
INSERT INTO 表名 VALUES (值1, 值2, ...);

-- 指定字段插入
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);

-- 批量插入
INSERT INTO 表名 (字段1, 字段2) 
VALUES 
(值1, 值2),
(值3, 值4);
-- 示例:向学生表插入数据
INSERT INTO tb_student (sno, sname, age) 
VALUES 
('2023001', '张三', 18),
('2023002', '李四', 19);

注意事项:

  • 插入值的顺序需与字段顺序一致

  • 未指定字段时,必须为所有字段赋值

  • 主键或唯一约束字段不可重复

2. 更新数据:UPDATE

UPDATE 表名 
SET 字段1=新值1, 字段2=新值2 
[WHERE 条件];

示例:

-- 将学号2023001的学生年龄改为20
UPDATE tb_student 
SET age = 20 
WHERE sno = '2023001';

-- 批量更新:所有年龄大于18的学生成绩+5分
UPDATE tb_score 
SET grade = grade + 5 
WHERE sno IN (
    SELECT sno FROM tb_student WHERE age > 18
);

注意事项

  • WHERE条件必须明确,否则会更新全表数据

  • 支持使用子查询进行复杂条件更新

3. 删除数据:DELETE

DELETE FROM 表名 [WHERE 条件];

示例:

-- 删除学号为2023001的学生记录
DELETE FROM tb_student 
WHERE sno = '2023001';

-- 删除成绩低于60分的学生
DELETE FROM tb_score 
WHERE grade < 60;

注意事项:

  • 无WHERE条件会清空整张表(慎用!)

  • 删除操作不可逆,建议先备份或使用事务

 4. 查询数据:SELECT(重点!)

SELECT 字段列表 
FROM 表名 
[WHERE 条件] 
[GROUP BY 分组字段] 
[HAVING 分组条件] 
[ORDER BY 排序字段 [ASC|DESC]];

操作示例:

  • 条件查询
-- 查询年龄在18-20岁之间的学生
SELECT * FROM tb_student 
WHERE age BETWEEN 18 AND 20;

-- 模糊查询姓"张"的学生
SELECT sname FROM tb_student 
WHERE sname LIKE '张%';
  • 聚合查询
-- 统计每个班级的平均成绩
SELECT class_id, AVG(grade) AS avg_grade 
FROM tb_score 
GROUP BY class_id 
HAVING avg_grade > 60;
  • 连接查询
-- 内连接查询学生成绩详情
SELECT s.sname, c.cname, sc.grade 
FROM tb_student s 
INNER JOIN tb_score sc 
ON s.sno = sc.sno 
INNER JOIN tb_course c 
ON sc.cno = c.cno;
  • 子查询
-- 查询比张三年龄大的学生
SELECT sname, age 
FROM tb_student 
WHERE age > (
    SELECT age FROM tb_student WHERE sname = '张三'
);

三、DML进阶技巧

1. 事务控制

START TRANSACTION;  -- 开启事务
INSERT INTO ...     -- 执行操作
UPDATE ...
COMMIT;             -- 提交事务
-- 或 ROLLBACK;    -- 回滚事务

2. 联合操作

-- 合并两个查询结果(UNION去重,UNION ALL不去重)
SELECT sno FROM tb_student WHERE age > 18
UNION
SELECT sno FROM tb_teacher WHERE dept = '计算机系';

四、关于空值 null 的注意事项

在SQL中,null 值表示缺失或未知的数据,处理时需注意以下几点:

比较操作

  • NULL与任何值(包括NULL)的比较结果都是unknown,而非 TRUE或 FALSE

  • 使用 IS NULL或 IS NOT NULL来判断是否为NULL

逻辑运算

  • NULL参与逻辑运算时,结果也是UNKNOWN(同上)

  • 例如,NULL AND TRUE结果为UNKNOWNNULL OR FALSE结果也是UNKNOWN

聚合函数

  • 大多数聚合函数(如COUNTSUMAVG等)会忽略NULL值。

  • COUNT(*)计算所有行数,而COUNT(column)忽略NULL值。

算术运算

  • 任何涉及NULL的算术运算结果都是NULL

排序

  • 在排序时,NULL通常被视为最小值(升序时排在最前,降序时排在最后)。

  • 可使用ORDER BY column ASC NULLS LASTORDER BY column DESC NULLS FIRST调整NULL的位置。

唯一约束

  • 在唯一约束列中,允许多个NULL值存在,因为它们被视为未知且不相等。

索引

  • 大多数数据库索引不包含NULL值,因此查询NULL时可能无法使用索引。

# 希望这篇总结能助你轻松攻克DML!如果觉得有用,点赞⭐收藏关注 三连支持吧!

你可能感兴趣的:(数据库,MySQL,学习笔记)