SQL详解之DML - 数据操作语言完整指南
引言
假设你是电商后台的工程师,每天要处理客户下单插入订单、促销活动前批量更新商品、过期活动清理优惠券这些高频操作——这些100%离不开SQL DML(数据操作语言)!
DML是SQL四大核心(DDL/DML/DCL/TCL)中和业务数据最贴近的,涵盖查询、增删改。本文会拆解每个核心命令,对比MySQL/PostgreSQL的常用差异,加测试场景化的示例、性能优化点。
1. DML基础扫盲
1.1 核心定义
DML(Data Manipulation Language)操作数据库表中的行级/列级数据,主要包含:
- SELECT:查询数据(虽有人单独归为DQL,但行业普遍默认DML包含)
- INSERT:新增数据
- UPDATE:修改数据
- DELETE:删除数据
DML不会直接改变表结构,且默认支持事务回滚(取决于数据库的自动提交配置)。
1.2 DML vs DDL的核心区别
先分清楚这俩最容易混淆的:
2. SELECT语句(高频必用)
2.1 通用基础查询
不管MySQL还是PostgreSQL,基础语法99%一致:
2.2 MySQL vs PostgreSQL 专属功能
基础外,俩库各有高频好用的特性:
MySQL专属
PostgreSQL专属
3. INSERT语句(新增)
3.1 通用基础插入
3.2 冲突处理(UPSERT:插入或更新)
这是俩库差异最大的INSERT功能!
MySQL:ON DUPLICATE KEY UPDATE
前提是插入的字段中有主键或唯一索引:
PostgreSQL:ON CONFLICT
同样需要主键或唯一索引,但语法更灵活(支持DO NOTHING跳过冲突):
4. UPDATE语句(修改)
4.1 通用基础修改
4.2 跨表修改
俩库写法不一样,注意区分:
MySQL写法
PostgreSQL写法
5. DELETE语句(删除)
5.1 通用基础删除
5.2 跨表删除
同样写法不同:
MySQL写法
PostgreSQL写法
5.3 分批删除大表数据(防锁表!)
如果要删大表的几十万/几百万行,千万不能直接DELETE全量——会锁表很久,影响其他业务!
MySQL写法
6. MySQL vs PostgreSQL DML高频差异表
7. DML性能优化小技巧
7.1 查询优化
7.2 批量操作优化
相关教程
总结
DML是数据库和业务的“桥梁”,不管是开发还是运维都必须熟练掌握。MySQL和PostgreSQL在DML上各有优势:
- MySQL:语法简洁,批量插入性能好,适合中小型电商/应用
- PostgreSQL:标准兼容性好,高级特性(窗口函数、数组、RETURNING)丰富,适合数据密集型/分析型应用
根据场景选对数据库和语法,再结合索引、批量操作等优化,就能写出高效、安全的DML语句了。

