DML语句
DML(Data Manipulation Language,数据操作语言) 是 SQL 中用于 操作表中数据 的核心部分 —— 不涉及表结构(那是 DDL),只关心“增删改”。
1. INSERT
Section titled “1. INSERT”用于向表中添加新行。
1.1. 单条插入
Section titled “1.1. 单条插入”INSERT INTO 表名 (列1, 列2, ...)VALUES (值1, 值2, ...);插入时一定要保证 列的数量 和 VALUES 的数量 一一对应。类型也要尽量匹配,不然会报错或发生隐式转换。
1.2. 批量插入
Section titled “1.2. 批量插入”INSERT INTO 表名 (列1, 列2, ...)VALUES (值1, 值2, ...), (值1, 值2, ...);注意单条 SQL 太大时(比如上百万行)可能超过
max_allowed_packet限制。
1.3. 忽略重复
Section titled “1.3. 忽略重复”INSERT IGNORE INTO 表名 (列1, 列2, ..., 列N)VALUES (值1, 值2, ..., 值N);1.4. 存在则更新不存在则插入
Section titled “1.4. 存在则更新不存在则插入”INSERT INTO 表名 (列1, 列2, ..., 列N)VALUES (值1, 值2, ..., 值N)ON DUPLICATE KEY UPDATE 列1 = 新值1, 列2 = 新值2, ..., 列N = 新值N;
ON DUPLICATE KEY UPDATE只会在主键或唯一索引冲突时触发。
1.5 插入查询结果
Section titled “1.5 插入查询结果”INSERT INTO 目标表 (列1, 列2, ...)SELECT 表A.列A, 表B.列B, ...FROM 表AJOIN 表B ON 表A.关联列 = 表B.关联列WHERE 条件;从查询结果插入,不用
VALUES。
2. UPDATE
Section titled “2. UPDATE”用于修改已有行的数据。
2.1. 单表更新
Section titled “2.1. 单表更新”UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;2.2.关联更新:
Section titled “2.2.关联更新:”UPDATE 表1 [AS 别名1]JOIN 表2 [AS 别名2] ON 关联条件[JOIN 表3 ... ON 关联条件]SET 表1.列1 = 新值1, 表1.列2 = 新值2, 表2.列3 = 新值3WHERE 条件;3. DELETE
Section titled “3. DELETE”用于删除表中的行。
3.1 单表删除
Section titled “3.1 单表删除”DELETE FROM 表名 WHERE 条件;3.2. 关联删除
Section titled “3.2. 关联删除”DELETE u FROM users uJOIN logs l ON u.id = l.user_idWHERE l.action = 'delete';4. 实用技巧
Section titled “4. 实用技巧”-
UPDATE / DELETE 一定要写 WHERE! → 建议开启
sql_safe_updates; -
大表 UPDATE/DELETE 分批操作 → 避免长事务、锁表;
DELETE FROM logs WHERE created_at < '2020-01-01' LIMIT 1000;-
INSERT 批量比单条快 → 减少网络往返 + 事务开销;
-
SELECT 避免
SELECT *→ 只查需要的列,减少 I/O; -
复杂查询用
EXPLAIN分析执行计划。