Sql详解之Dml
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 可用于降低写操作优先级 |
安全性 | 使用事务(BEGIN 、ROLLBACK 、COMMIT )保障数据安全 |
完整示例:向学校数据库插入测试数据
以下是一组完整的 INSERT
语句,用于将数据插入前面定义的五张表中,适合用于开发测试或教学演示。
📂 表包括:
tb_college
:学院tb_student
:学生tb_teacher
:教师tb_course
:课程tb_record
:选课记录
🧩 示例代码已在你的原文中提供,可直接运行以快速填充测试数据。
小结:DML 在项目开发中的作用
在实际项目中,DML 是日常开发中最频繁使用的 SQL 类型,常见应用包括:
- 用户注册(
INSERT
新用户信息) - 用户删除(逻辑或物理
DELETE
) - 用户信息编辑(
UPDATE
基本信息) - 批量导入数据(
INSERT ... SELECT
) - 数据迁移与修复
掌握 DML,不仅是开发者日常开发的基本功,更是构建可靠、稳定、高性能系统的关键。
如需下一节《DQL 数据查询语言》讲解,请回复【继续】,我将深入讲解 SELECT
、WHERE
、JOIN
、GROUP BY
等核心语法。