从零起步学习MySQL || 第三章:DML语句定义及常见用法示例
一、DML 是什么?
DML(数据操作语言)主要用于对数据库表中的数据进行增、删、改、查操作。
在 MySQL 中,常见的 DML 语句包括:
操作类型 | SQL语句 | 说明 |
---|---|---|
插入数据 | INSERT | 向表中新增记录 |
更新数据 | UPDATE | 修改已存在的记录 |
删除数据 | DELETE | 删除已有记录 |
查询数据 | SELECT | 检索数据(严格来说,SELECT 属于 DQL:Data Query Language) |
不过在很多书籍和面试中,SELECT
也会被包含在 DML 的范畴中。
二、INSERT
:插入数据
1. 基本语法
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);
2. 示例
INSERT INTO student (id, name, age, major)
VALUES (1, '张三', 20, '计算机科学');
3. 一次插入多条数据
INSERT INTO student (id, name, age, major)
VALUES
(2, '李四', 21, '软件工程'),
(3, '王五', 19, '人工智能');
4. 插入全部列
如果你给所有字段插入值,可以省略列名(但推荐写上):
INSERT INTO student VALUES (4, '赵六', 22, '网络工程');
三、UPDATE
:更新数据
1. 基本语法
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;
⚠️ 务必写 WHERE 条件,否则会修改整张表!
2. 示例
UPDATE student
SET age = 22, major = '大数据技术'
WHERE name = '张三';
3. 增加条件过滤
UPDATE student
SET major = '人工智能'
WHERE age > 20 AND major = '计算机科学';
四、DELETE
:删除数据
1. 基本语法
DELETE FROM 表名 WHERE 条件;
2. 示例
DELETE FROM student WHERE id = 3;
⚠️ 同样注意:不加 WHERE 会删除表中所有数据!
DELETE FROM student;
这句会清空整个表,但表结构仍然保留。
3. 对比 TRUNCATE
TRUNCATE TABLE 表名;
作用也是清空表数据,但:
-
TRUNCATE
执行更快; -
不可回滚;
-
会重置自增主键;
-
属于 DDL(数据定义语言),不是 DML。
五、SELECT
:查询数据
SELECT
是最常用的语句,查询数据的方式非常灵活。
1. 基本语法
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件
ORDER BY 排序列
LIMIT 限制条数;
2. 示例
SELECT name, age FROM student;
3. 条件过滤
SELECT * FROM student WHERE age > 20;
4. 模糊查询
SELECT * FROM student WHERE name LIKE '张%';
%
表示任意字符序列。
5. 排序
SELECT * FROM student ORDER BY age DESC;
6. 限制条数(分页)
SELECT * FROM student LIMIT 5; -- 前5条
SELECT * FROM student LIMIT 5, 5; -- 从第6条开始取5条
7. 聚合函数
SELECT COUNT(*) AS 总人数, AVG(age) AS 平均年龄 FROM student;
8. 分组
SELECT major, COUNT(*) AS 人数
FROM student
GROUP BY major
HAVING 人数 > 2;
六、DML 操作与事务(Transaction)
在 Java 后端中,事务控制非常关键。
DML 语句会改变数据,因此要注意事务的一致性。
1. 开启与提交事务
START TRANSACTION; -- 开始事务
UPDATE account SET balance = balance - 100 WHERE id = 1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
COMMIT; -- 提交事务
2. 回滚事务
ROLLBACK; -- 撤销本次事务中未提交的修改
3. 与 Java 结合
在 Java 中,你通常会通过框架(如 Spring)来控制事务,例如:
@Transactional
public void transfer(int fromId, int toId, int amount) {accountMapper.decreaseBalance(fromId, amount);accountMapper.increaseBalance(toId, amount);
}
七、DML 语句的执行顺序(面试常问)
虽然 SQL 是声明式语言,但 MySQL 在执行查询时有内部逻辑顺序:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
八、总结表格
操作 | SQL 语句 | 关键注意点 |
---|---|---|
插入 | INSERT INTO | 列和值要匹配 |
更新 | UPDATE ... SET ... WHERE | 必写 WHERE |
删除 | DELETE FROM ... WHERE | 小心误删 |
查询 | SELECT ... FROM ... | 支持条件、分组、排序、分页 |
事务 | START TRANSACTION / COMMIT / ROLLBACK | 保证数据一致性 |