MySQL DML语句详解:增删改查与查询进阶语法

Leo
Leo
发布时间:2026-10-16| 6人浏览过
原创

DML(Data Manipulation Language,数据操纵语言)是开发人员使用最频繁的数据库操作集合,主要用于对库表中的记录进行添加、修改、删除和查询。本文将系统梳理这些核心语法的实操方法。

1. 插入记录 (Insert)

向数据表中新增数据是日常操作的基础。支持一次性插入单条或多条记录。

第1步:插入单条记录

目的:向指定表的特定列中写入一组值。
语法入口:insert into

insert into tablename (field1,field2,...,fieldn) values (value1,value2,...,valuen);

第2步:一次性插入多条数据

目的:减少网络交互次数,提高批量数据导入效率。
语法入口:在values后追加多个括号组。

insert into tablename (field1,field2,...,fieldn)
values 
 (value1,value2,...,valuen),
 (value1,value2,...,valuen);

2. 更新记录 (Update)

用于修正已有数据或根据逻辑同步表间数据。操作时务必注意条件限制,防止误改全表。

第1步:更新单表数据

目的:修改符合条件的行数据。
参数说明:[where condition]为可选参数,若不添加则整张表的所有行都会被更新。
风险提示:执行前请确认where条件的准确性。

update tablename set field1=value1, filed2=value2,...fieldn=valuen [where condition]

第2步:同时更新多个表的数据

目的:根据一个表的字段动态更新另一个表的对应字段,常用于主从表数据同步。
操作方式:在update后列出涉及的多表名。

update t1,t2,...,tn set t1.field1=expr1, tn.field=exprn [where condition];

3. 简单查询记录 (Select基础)

查询是返回结果集而非改变数据。掌握基础过滤与别名处理是进阶的前提。

第1步:基础列筛选

目的:按需查看数据。
操作:使用*通配符可查询所有字段;若需特定列,列出字段名即可。

select * from tablename [where condition];

select field1,field2,...,fieldn from tablename [where condition];

第2步:使用别名优化显示

目的:让查询结果的列名更易读,或在多表查询中标识数据来源。
操作:使用关键字AS(可省略)为列或表命名。

select field1 AS f1, field2 f2 from tablename;

select t2.field1 AS f1, t1.field2 f2 from table1 as t1, table2 t2;

4. 删除记录 (Delete)

删除操作具有不可逆性(除非有备份),需格外谨慎。分为单表删除和多表级联式删除。

第1步:删除单表记录

目的:移除指定条件的一行或多行数据。
注意:不加where条件将清空全表数据。

delete from tablename [where condition];

第2步:同时删除多个表的数据

目的:满足特定连接条件时,从关联的多个表中同时清除记录。
规则:条件成立则删除有条件表对应的数据,无条件表可能会全表删除;条件不成立则均不删除。
建议:先备份或在测试环境中验证此类高危操作。

delete t1,t2,...,tn from t1,t2,...,tn [where condition];
单表及多表“增改查删”的实际效果演示:



5. 查询记录详解 (DQL进阶)

SELECT语句常被称为DQL(Data Query Language),其结构类似积木拼装。理解各子句的执行顺序和功能是实现复杂数据提取的关键。

第1步:查询不重复的记录 (Distinct)

目的:去除查询结果集中完全相同的重复行。
操作:使用distinct关键字作用于查询字段。

select distinct filed from tablename;

第2步:高级条件过滤 (Where)

目的:精准定位符合特定标准的数据。
常用运算符:

  • 比较运算符:=, >, <, !=, <>
  • 空值判断:is null, is not null
  • 逻辑组合:and (且), or (或)
  • 范围匹配:in, not in
  • 模糊匹配:like。其中_代表单个字符,%代表零个或多个任意字符。

第3步:聚合分组统计 (Group By & Having)

目的:按类别汇总统计数据,如求平均值、总数或极值。

select [field...] fun_name from tablename
[where condition]
[group by field... [with rollup]]
[having condition];

参数解析:

  1. fun_name:聚合函数,常用有sum()求和、count(*)计数、avg()平均、max()/min()最大值/最小值。
  2. group by:对指定列进行分类。配合with rollup可对分类后的结果再进行层级汇总。
  3. having:对分组后的结果集进行二次过滤。

区别要点:where用于分组前的原始数据过滤(效率高);having用于分组后的结果集过滤。优先在where中处理条件以减少运算量。

带条件过滤的聚合查询示例: 通过取别名简化输出列名:

第4步:结果排序 (Order By)

目的:控制结果集的展示顺序。
操作:asc为默认升序,desc为降序。可支持多列排序,用逗号隔开优先级。

order by field1 [desc|asc], field2 [desc|asc]...
单列排序演示:
多列排序演示:

第5步:分页限制查询 (Limit)

目的:实现数据分页加载,避免一次性拉取过多数据影响性能。
语法:limit offset_start, row_count。
- offset_start:起始偏移量(从0开始计数)。
- row_count:期望返回的行数。

从第1条(索引0)开始,查询两条数据的效果:

第6步:多表关联查询 (Join)

目的:当业务逻辑需要跨表获取信息时使用。
操作:重点掌握内连接和左连接。

  • 左连接 (Left Join):以左表为主,返回左表所有记录,右表无匹配项则为NULL。
  • 内连接 (Inner Join):仅返回两个表中互相匹配的记录。
-- 左连接
select * from t1 left join t2 on t1.field1=t2.field2;

-- 内连接
select * from t1 inner join t2 on t1.field1=t2.field2;
-- 也可写作隐式内连接
select * from t1, t2 where t1.field1=t2.field2;
连表查询效果图示:

第7步:子查询与联合查询

子查询:将一个查询结果作为另一个查询的条件。通常用括号()包裹。



部分子查询可以转化为等价的连表查询以提升可读性:

UNION联合:将多个查询结果纵向合并。要求各个查询结果的列数必须相同。

select ... from t1
union / union all
select ... from t2;
联合查询成功示例:
列数不等导致的报错示例:
确保固定查询结果集字段的正确写法:

6. SELECT语句执行顺序总结

理解SQL底层的执行顺序有助于编写更高效的代码。实际执行顺序如下:

  1. (1) FROM:确定查询的数据源。
  2. (2) ON:连接条件。
  3. (3) JOIN:执行连接操作。
  4. (4) WHERE:过滤原始行的数据。
  5. (5) GROUP BY:对数据进行分组。
  6. (6) HAVING:对分组后的结果进行过滤。
  7. (7) SELECT:选择要展示的列。
  8. (8) DISTINCT:去除重复。
  9. (9) ORDER BY:排序。
  10. (10) LIMIT:限制返回行数。
以上就是MySQL基础教程之DML语句的详细内容,更多关于MySQL进阶知识请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。