【MySQL 零基础入门】DML 核心语法全解析:表数据的增删改操作篇

在上一篇文章中,我们掌握了 DDL(数据定义语言) ,学会了如何创建数据库和表结构。今天我们要学习的 DML(数据操作语言) ,则是对表中数据进行增、删、改 的核心工具。本文将基于 sicheng 数据库的 student 学生表,结合实战案例拆解 DML 语法,新手也能轻松上手!(之前已经详细写过了MySQL的基础操作 现在时对MySQL体系的完善 想看详细操作的话请看之前写的MySQL的操作)


目录

[一、DML 概述:和 DDL 分清边界](#一、DML 概述:和 DDL 分清边界)

[二、INSERT:添加数据的 3 种方式](#二、INSERT:添加数据的 3 种方式)

[1. 指定字段插入:灵活赋值](#1. 指定字段插入:灵活赋值)

[2. 全字段插入:顺序不能错](#2. 全字段插入:顺序不能错)

[3. 批量插入:高效插入多条数据](#3. 批量插入:高效插入多条数据)

[4. 插入数据的限制:不符合规则直接报错](#4. 插入数据的限制:不符合规则直接报错)

[三、UPDATE:修改数据,WHERE 条件是关键](#三、UPDATE:修改数据,WHERE 条件是关键)

[1. 基本语法](#1. 基本语法)

[2. 实战案例:精准修改单条记录](#2. 实战案例:精准修改单条记录)

[3. 高危操作:修改全表数据](#3. 高危操作:修改全表数据)

[四、DELETE:删除数据,同样别漏了 WHERE](#四、DELETE:删除数据,同样别漏了 WHERE)

[1. 基本语法](#1. 基本语法)

[2. 实战案例:删除指定条件的记录](#2. 实战案例:删除指定条件的记录)

[3. 高危操作:清空整张表数据](#3. 高危操作:清空整张表数据)

[五、DML 核心知识点总结](#五、DML 核心知识点总结)

[六、写在最后:DQL 才是查询的核心](#六、写在最后:DQL 才是查询的核心)


一、DML 概述:和 DDL 分清边界

首先我们要明确 DML 和 DDL 的区别,避免混淆:

  • DDL :操作数据库、表的结构 ,比如 CREATE DATABASECREATE TABLE
  • DML :操作表中的数据记录 ,核心指令只有 3 个:
    • INSERT:添加数据
    • UPDATE:修改数据
    • DELETE:删除数据

本文所有案例都基于 sicheng 数据库下的 student 表,表结构预先设计如下:

sql 复制代码
-- 切换到 sicheng 数据库
USE sicheng;

-- 创建 student 学生表
CREATE TABLE student (
    id INT COMMENT '学生编号',
    name VARCHAR(10) COMMENT '学生姓名',
    age TINYINT UNSIGNED COMMENT '学生年龄',
    gender CHAR(1) COMMENT '性别',
    class VARCHAR(20) COMMENT '班级'
) COMMENT '学生表';

二、INSERT:添加数据的 3 种方式

INSERT 是向表中插入数据的指令,根据需求不同,有 指定字段插入、全字段插入、批量插入 三种写法,核心要求是 字段和值的顺序、类型必须一一对应

1. 指定字段插入:灵活赋值

当我们只需要给部分字段赋值时,就可以用这种方式,未指定的字段会默认赋值为 NULL

语法:

sql 复制代码
INSERT INTO 表名(字段1, 字段2, ...) VALUES(值1, 值2, ...);

学生案例:

需求:向 student 表插入 1 条学生数据,只填写编号、姓名、班级。

sql 复制代码
INSERT INTO student(id, name, class) VALUES(1, '张三', '高一(1)班');

注意事项

  • 字符串和日期类型的值必须用单引号 包裹(比如 '张三''高一(1)班')。
  • 数据大小不能超出字段定义范围(比如 ageTINYINT UNSIGNED,就不能插入负数)。

2. 全字段插入:顺序不能错

如果要给所有字段赋值,可以省略字段列表,但值的顺序必须和表结构完全一致

语法:

sql 复制代码
INSERT INTO 表名 VALUES(值1, 值2, ..., 值n);

学生案例:

需求:插入 1 条完整的学生数据,包含所有字段。

sql 复制代码
INSERT INTO student VALUES(2, '李四', 16, '男', '高一(2)班');

易错点

如果值的顺序和表结构不匹配,会直接报错。比如把 agegender 顺序写反,MySQL 会提示 "数据类型不匹配"。

3. 批量插入:高效插入多条数据

当需要插入多条记录时,不用写多条 INSERT 语句,只需在 VALUES 后用逗号分隔多组值,能大幅提升插入效率。

语法:

sql 复制代码
INSERT INTO 表名(字段1, 字段2) VALUES(值1, 值2), (值3, 值4), ...;

学生案例

需求:批量插入 3 条学生数据。

sql 复制代码
INSERT INTO student(id, name, age, class) 
VALUES(3, '王五', 17, '高一(1)班'),
(4, '赵六', 16, '高一(2)班'),
(5, '孙七', 18, '高一(1)班');

效率优势

批量插入减少了网络往返和 SQL 解析的开销,比单条插入快得多。执行成功后,MySQL 会返回 3 rows affected,表示 3 条记录插入成功。

4. 插入数据的限制:不符合规则直接报错

插入数据时,必须符合字段的类型和约束,否则会报错。

学生案例:插入负数年龄验证

需求:尝试给 age 字段插入 -1ageTINYINT UNSIGNED 无符号整型)。

sql 复制代码
INSERT INTO student(id, name, age) VALUES(6, '周八', -1);

执行结果

直接报错 Out of range value for column 'age',原因是无符号整型只能存储 0-255 的整数。

结论

插入数据前,一定要确认数据符合字段的类型、长度和约束要求。

三、UPDATE:修改数据,WHERE 条件是关键

UPDATE 用于修改表中已有的数据,核心是 WHERE 条件 ------ 没有 WHERE 条件会修改整张表的所有数据,属于高危操作!

1. 基本语法

sql 复制代码
UPDATE 表名 SET 字段1=值1, 字段2=值2, ... [WHERE 条件];
  • 多字段修改时,用逗号分隔。
  • WHERE 条件:指定要修改的记录,省略则修改全表。

2. 实战案例:精准修改单条记录

案例 1:修改单个字段

需求:将编号为 1 的学生姓名改为 "张三丰"。

sql 复制代码
UPDATE student SET name='张三丰' WHERE id=1;

执行后返回 1 row affected,表示 1 条记录被修改。用 SELECT 语句(后续会讲)可以验证修改结果。

案例 2:同时修改多个字段

需求:将编号为 2 的学生姓名改为 "李四光",班级改为 "高一 (3) 班"。

sql 复制代码
UPDATE student SET name='李四光', class='高一(3)班' WHERE id=2;

关键点:多个字段之间用逗号分隔,WHERE 条件确保只修改目标记录。

3. 高危操作:修改全表数据

如果省略 WHERE 条件,会修改整张表的所有数据,一定要谨慎!

案例:将所有学生的班级改为 "高一实验班"

sql 复制代码
UPDATE student SET class='高一实验班';

执行后返回 5 rows affected,表示 5 条学生记录的班级都被修改。生产环境中,这种操作一定要先备份数据!

四、DELETE:删除数据,同样别漏了 WHERE

DELETE 用于删除表中的数据记录,和 UPDATE 一样,WHERE 条件决定了删除的范围,省略条件会清空整张表!

1. 基本语法

sql 复制代码
DELETE FROM 表名 [WHERE 条件];

注意:DELETE 是删除整条记录 ,不能只删除某个字段的值(如果要清空字段值,用 UPDATE 设为 NULL)。

2. 实战案例:删除指定条件的记录

案例 1:删除单个学生记录

需求:删除编号为 5 的学生记录。

sql 复制代码
DELETE FROM student WHERE id=5;

执行后返回 1 row affected,编号为 5 的学生数据被永久删除。

案例 2:删除符合条件的多条记录

需求:删除所有 "高一 (1) 班" 的学生记录。

sql 复制代码
DELETE FROM student WHERE class='高一(1)班';

执行后返回 2 rows affected,表示 2 条符合条件的记录被删除。

3. 高危操作:清空整张表数据

省略 WHERE 条件,会删除表中所有数据,表结构会保留。

sql 复制代码
DELETE FROM student;

执行后,student 表变成空表,但表结构还在。生产环境中,执行前务必确认数据已备份!

五、DML 核心知识点总结

为了方便大家复习,我把 DML 的核心知识点整理成了表格:

知识点 核心内容 考试 / 面试重点 难度系数
DML 概述 数据操作语言,负责增删改表数据;与 DDL 的区别:DDL 操作结构,DML 操作数据 区分 DML 和 DDL 的功能边界 ⭐⭐
INSERT 语法 3 种写法:指定字段、全字段、批量插入;字段和值必须一一对应 字符串需加引号;批量插入的效率优势 ⭐⭐⭐
INSERT 限制 数据必须符合字段类型和约束(如无符号整型不能存负数) 违反约束会直接报错 ⭐⭐⭐⭐
UPDATE 语法 UPDATE 表名 SET 字段=值 WHERE 条件 无 WHERE 会修改全表,属于高危操作 ⭐⭐⭐⭐
DELETE 语法 DELETE FROM 表名 WHERE 条件 无 WHERE 会清空全表;只删记录不删结构 ⭐⭐⭐⭐

六、写在最后:DQL 才是查询的核心

通过本文的学习,我们已经掌握了 DML 的增删改操作,能够对 student 表的数据进行灵活管理。但在实际开发中,我们更常用的是 查询数据------ 比如 "查询高一 (1) 班的所有学生""查询年龄大于 16 岁的女生"。

这些需求,就需要用到我们下一篇要讲的 DQL(数据查询语言),它是 MySQL 中最核心、最复杂的语法,也是面试和工作中的重点。感兴趣的小伙伴可以关注我,下一篇文章带你吃透 DQL 查询!


希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
xhyyvr2 小时前
火场自救绳技 ——VR 消防结绳学习系统
学习·vr·vr消防安全·vr消防安全教育·vr安全知识科普·vr技巧培训
Kratzdisteln2 小时前
【Web-Crawler-Steamdt】以项目文件steamdt_crawler.py学习python爬虫
爬虫·python·学习
yy17962610012 小时前
mysql基本结构及操作
数据库
todoitbo2 小时前
时序数据库选型实战指南:国产时序数据库Apache IoTDB的技术对比与实践
数据库·apache·时序数据库·iotdb·国产
赵渝强老师3 小时前
【赵渝强老师】TiDB的备份恢复策略
数据库·mysql·oracle·tidb
学编程的闹钟3 小时前
简单分析VMProtectV3.3.1
学习
Ditglu.3 小时前
数据库运维(DBA)职业能力提升知识库
运维·数据库·dba
黛琳ghz3 小时前
机密计算与安全容器:openEuler安全生态深度测评
服务器·数据库·安全·计算机·操作系统·openeuler
AI营销快线3 小时前
2025金融AI语音质检系统选型指南
笔记