Sql详解之Dml
基础教学 1 min read

Sql详解之Dml

Blog Author

SQL详解之DML(数据操作语言)

在数据库操作中,DML(Data Manipulation Language) 是最常用的一类 SQL 语句。它主要用于增、删、改数据库中的表数据——即 INSERT(插入)、DELETE(删除)和 UPDATE(更新)。下面我们以“学校选课系统”的数据库为例,详细讲解每个操作的语法、使用场景、注意事项与最佳实践。


切换数据库

在进行任何 DML 操作前,请先切换到目标数据库:

USE `school`;

INSERT 操作(插入数据)

✅ 基本语法

INSERT INTO 表名 (字段1, 字段2, ...) 
VALUES (1, 2, ...);

📌 常见用法

1. 插入完整行(不指定字段)

INSERT INTO `tb_college` 
VALUES (DEFAULT, '计算机学院', '学习计算机科学与技术的地方');

使用 DEFAULT 为自增主键赋默认值。

2. 插入部分字段(推荐方式)

INSERT INTO `tb_college` (`col_name`, `col_intro`) 
VALUES ('计算机学院', '学习计算机科学与技术的地方');

推荐使用指定字段的写法,可读性更强、健壮性更高。

3. 批量插入多行

INSERT INTO `tb_college` (`col_name`, `col_intro`) 
VALUES 
  ('外国语学院', '学习歪果仁的语言的学院'),
  ('经济管理学院', '经世济民,治理国家;管理科学,兴国之道');

批量插入在性能优化中尤为重要,特别是在初始化数据库或导入大量数据时。

4. 从其他表查询插入(子查询插入)

INSERT INTO `tb_college` (`col_name`, `col_intro`) 
SELECT `a`, `b` FROM `tb_temp`;

⚠ 注意事项

  • 插入数据时要确保主键不重复。
  • 省略字段时,必须确保省略字段有默认值或允许为 NULL。
  • 可以使用 LOW_PRIORITY 延迟执行插入,减少对并发查询的干扰(适用于生产环境的优化)。

DELETE 操作(删除数据)

✅ 基本语法

DELETE FROM 表名 WHERE 条件;

📌 使用示例

1. 按条件删除指定记录

DELETE FROM `tb_college` WHERE col_id = 1;

2. 删除所有记录(⚠ 极度危险)

DELETE FROM `tb_college`;

💡 建议 永远不要执行无 WHERE 子句的 DELETE,容易误删。

🆚 TRUNCATE VS DELETE

特性 DELETE TRUNCATE
是否逐行删除 ✅ 是 ❌ 否(直接重建表)
是否能回滚 ✅ 可 ❌ 不可
是否保留结构 ✅ 是 ✅ 是(但重置自增)
执行效率 慢(逐条) 快(一次性清空)
用途建议 删除部分数据 快速清空表,用于测试初始化等场景

UPDATE 操作(更新数据)

✅ 基本语法

UPDATE 表名 
   SET 字段1=1, 字段2=2, ...
 WHERE 条件;

📌 使用示例

1. 更新单字段

UPDATE `tb_student` 
   SET `stu_name`='杨逍' 
 WHERE `stu_id`=1001;

2. 同时更新多个字段

UPDATE `tb_student`
   SET `stu_name`='杨逍',
       `stu_birth`='1975-12-29'
 WHERE `stu_id`=1001;

🔍 注意:不要用 stu_name='杨过' 作为条件,否则可能更新多条记录。

⚠ 注意事项

  • WHERE 子句是防止误更新的关键,一定要精确指定目标记录。
  • SET 中的 = 是赋值,不是条件判断。
  • 避免全表更新,除非确有需求且已备份数据。

最佳实践总结

操作 推荐做法
INSERT 指定字段 + 批量插入 + 子查询插入(用于迁移/导入数据)
DELETE 永远使用 WHERE,删除所有数据请使用 TRUNCATE
UPDATE 精确指定条件,仅更新必要字段,谨慎使用无条件更新
性能优化 LOW_PRIORITY 可用于降低写操作优先级
安全性 使用事务(BEGINROLLBACKCOMMIT)保障数据安全

完整示例:向学校数据库插入测试数据

以下是一组完整的 INSERT 语句,用于将数据插入前面定义的五张表中,适合用于开发测试或教学演示。

📂 表包括:

  • tb_college:学院
  • tb_student:学生
  • tb_teacher:教师
  • tb_course:课程
  • tb_record:选课记录

🧩 示例代码已在你的原文中提供,可直接运行以快速填充测试数据。


小结:DML 在项目开发中的作用

在实际项目中,DML 是日常开发中最频繁使用的 SQL 类型,常见应用包括:

  • 用户注册(INSERT 新用户信息)
  • 用户删除(逻辑或物理 DELETE
  • 用户信息编辑(UPDATE 基本信息)
  • 批量导入数据(INSERT ... SELECT
  • 数据迁移与修复

掌握 DML,不仅是开发者日常开发的基本功,更是构建可靠、稳定、高性能系统的关键。


如需下一节《DQL 数据查询语言》讲解,请回复【继续】,我将深入讲解 SELECTWHEREJOINGROUP BY 等核心语法。

Related Topics