数据库基础:DML数据操作语言 📅 发布时间:2026/9/4 5:16:27 👁 浏览次数: 数据库基础DML数据操作语言前言本文是数据库基础系列的第七篇。上一篇我们进入了 SQL 语言中最核心的部分——DQL 数据查询语言学习了从简单查询到多表连接的各种查询技巧。本篇我们将学习DML数据操作语言Data Manipulation Language也就是数据的增删改操作。在日常开发中查询是最频繁的操作但增删改同样是不可或缺的能力。只有掌握了 DML我们才能真正实现对数据的完整控制。目录一、插入语句二、修改语句三、删除语句四、总结一、插入语句1.1 方式一经典插入语法INSERTINTO表名(列名1,列名2,...)VALUES(值1,值2,...);特点列名和值必须一一对应列名可以省略此时默认所有列都需要插入值支持插入多行支持子查询示例-- 向 students 表插入一条学生记录INSERTINTOstudents(id,name,age,class_id)VALUES(1,张三,20,1);-- 插入时省略列名必须按表结构顺序提供所有值INSERTINTOstudentsVALUES(2,李四,21,2);-- 只插入部分字段未指定的字段自动赋 NULLINSERTINTOstudents(id,name)VALUES(3,王五);1.2 方式二SET 方式语法INSERTINTO表名SET列名1值1,列名2值2,...;示例INSERTINTOstudentsSETid4,name赵六,age22,class_id1;1.3 两种方式对比对比维度方式一VALUES方式二SET插入多行支持不支持子查询插入支持不支持代码简洁性一般较简洁适用场景批量插入、子查询插入单条记录插入方式一插入多行示例-- 同时插入多条记录INSERTINTOstudents(id,name,age,class_id)VALUES(5,孙七,19,2),(6,周八,20,1),(7,吴九,21,3);方式一子查询插入示例-- 将 temp_students 表中 age 20 的学生插入到 students 表INSERTINTOstudents(id,name,age,class_id)SELECTid,name,age,class_idFROMtemp_studentsWHEREage20;二、修改语句2.1 单表修改语法UPDATE表名SET列名1新值1,列名2新值2,...WHERE筛选条件;注意WHERE 条件决定了哪些行会被修改。如果省略 WHERE整张表都会被更新。生产环境中务必先 SELECT 验证条件是否正确。示例-- 修改 students 表中姓张的学生的年龄改为 25UPDATEstudentsSETage25WHEREnameLIKE张%;-- 修改 students 表中 id 为 3 的名称为王五班级改为 2UPDATEstudentsSETname王五,class_id2WHEREid3;2.2 多表修改SQL92 语法等值连接UPDATE表1别名1,表2别名2SET列名值,...WHERE连接条件AND筛选条件;示例-- 将二班所有学生的年龄改为 23UPDATEstudents s,classes cSETs.age23WHEREs.class_idc.idANDc.class_name二班;SQL99 语法JOIN 连接UPDATE表1别名1INNER|LEFT|RIGHTJOIN表2别名2ON连接条件SET列名值,...WHERE筛选条件;示例-- 将三班所有学生的年龄改为 24INNER JOIN 版本UPDATEstudents sINNERJOINclasses cONs.class_idc.idSETs.age24WHEREc.class_name三班;-- 将没有分配班级的学生的班级改为 1RIGHT JOIN 版本UPDATEstudents sRIGHTJOINclasses cONs.class_idc.idSETs.class_id1WHEREs.idISNULL;三、删除语句3.1 方式一DELETE单表删除语法DELETEFROM表名WHERE筛选条件;示例-- 删除年龄小于 18 岁的学生信息DELETEFROMstudentsWHEREage18;多表删除SQL92 语法DELETE表1的别名,表2的别名FROM表1别名,表2别名WHERE连接条件AND筛选条件;SQL99 语法DELETE表1的别名,表2的别名FROM表1别名INNER|LEFT|RIGHTJOIN表2别名ON连接条件WHERE筛选条件;示例-- 删除一班所有学生的信息只删 students 表DELETEsFROMstudents sINNERJOINclasses cONs.class_idc.idWHEREc.class_name一班;-- 删除三班及其所有学生的信息同时删两张表DELETEs,cFROMstudents sINNERJOINclasses cONs.class_idc.idWHEREc.class_name三班;3.2 方式二TRUNCATE语法TRUNCATETABLE表名;注意TRUNCATE 不能加 WHERE 条件只能整表清空且不可回滚请谨慎使用。示例-- 清空 temp_students 表整表删除TRUNCATETABLEtemp_students;3.3 DELETE 与 TRUNCATE 对比对比维度DELETETRUNCATEWHERE 条件支持不支持执行效率慢逐行删除快直接释放数据页自增长列从断点继续从 1 重新开始返回值有返回受影响行数无事务回滚支持回滚不可回滚自增长列差异演示-- 查看 students 表SELECT*FROMstudents;-- DELETE 删除后再插入自增长列从断点开始DELETEFROMstudents;INSERTINTOstudents(name,age,class_id)VALUES(小明,20,1);-- id 从上次断点继续-- TRUNCATE 删除后再插入自增长列从 1 开始TRUNCATETABLEstudents;INSERTINTOstudents(name,age,class_id)VALUES(小明,20,1);-- id 从 1 重新开始四、总结核心脉络插入数据INSERT方式一INSERT INTO 表名 VALUES (值1, 值2, ...)按字段顺序依次赋值支持一次插入多行方式二INSERT INTO 表名 SET 字段1值1, 字段2值2, ...指定字段赋值每次只能插入一条修改数据UPDATE单表修改UPDATE 表名 SET 字段值 WHERE 条件多表修改联立多张表进行更新删除数据DELETE / TRUNCATEDELETE可加WHERE条件支持事务回滚逐行删除TRUNCATE清空整表不可回滚效率更高三个关键要点插入方式一VALUES功能更强大支持多行和子查询方式二SET更适合单条插入修改WHERE 条件千万不能忘否则整张表都会被更新删除DELETE 可加条件可回滚TRUNCATE 效率高但不可回滚慎用 TRUNCATE系列直达上篇数据库基础DQL 数据查询语言本篇数据库基础DML 数据操作语言本文下篇数据库基础DDL数据定义语言