MySQL 中的 UPDATE 语句

MySQL 中的 UPDATE 语句

UPDATE 语句用于修改表中的数据,可以更新单行或多行数据。


1. UPDATE 语法

sql 复制代码
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;

AI生成项目sql
123

⚠ 注意:

  • 必须加 WHERE ,否则会修改所有行。
  • SET 后可同时更新多个字段。
  • WHERE 用于筛选需要更新的记录。

2. 基本 UPDATE 示例

(1) 更新单个字段

ini 复制代码
UPDATE users
SET age = 30
WHERE id = 1;

AI生成项目sql
123

解释:

  • 将 id = 1 的 age 更新为 30。

(2) 更新多个字段

ini 复制代码
UPDATE users
SET age = 30, city = 'Shanghai'
WHERE id = 1;

AI生成项目sql
123

解释:

  • id = 1 的 age 改为 30,city 改为 'Shanghai'。

(3) 更新所有行(小心使用!)

ini 复制代码
UPDATE users SET status = 'inactive';

AI生成项目sql
1

⚠ 危险:

  • 没有 WHERE,会更新整个表!
  • status 字段的所有数据都变成 'inactive'。

如何防止误操作?

  • 先用 SELECT 检查更新范围

    :

    sql 复制代码
    SELECT * FROM users WHERE status = 'active';
    
    AI生成项目sql
    1
  • 开启事务(如果支持)

    :

    sql 复制代码
    START TRANSACTION;
    UPDATE users SET status = 'inactive';
    ROLLBACK;  -- 取消
    COMMIT;    -- 确认更新
    
    AI生成项目sql
    1234

3. UPDATE 结合 WHERE 条件

(1) 使用 = 精确匹配

sql 复制代码
UPDATE users SET age = 25 WHERE name = 'Alice';

AI生成项目sql
1

更新 name = 'Alice' 的用户的 age 为 25。


(2) 使用 AND 和 OR

ini 复制代码
UPDATE users
SET status = 'inactive'
WHERE age > 30 AND city = 'Beijing';

AI生成项目sql
123

更新 age > 30 且 city = 'Beijing' 的用户。

ini 复制代码
UPDATE users
SET status = 'inactive'
WHERE age > 50 OR city = 'Shanghai';

AI生成项目sql
123

更新 age > 50 或 city = 'Shanghai' 的用户。


(3) 使用 IN

sql 复制代码
UPDATE users
SET vip_status = 'gold'
WHERE id IN (1, 2, 3, 5);

AI生成项目sql
123

更新 id 在 (1,2,3,5) 里的用户。


(4) 使用 BETWEEN

sql 复制代码
UPDATE users
SET level = 'senior'
WHERE age BETWEEN 30 AND 40;

AI生成项目sql
123

更新 age 在 30-40 之间的用户。


(5) 使用 LIKE

sql 复制代码
UPDATE users
SET department = 'Tech'
WHERE email LIKE '%@gmail.com';

AI生成项目sql
123

更新所有 email 以 @gmail.com 结尾的用户。


4. UPDATE 结合 JOIN

批量更新数据 ,通过 JOIN 关联两个表:

ini 复制代码
UPDATE users u
JOIN orders o ON u.id = o.user_id
SET u.vip_status = 'gold'
WHERE o.total_amount > 1000;

AI生成项目sql
1234

解释:

  • users 表和 orders 表通过 user_id 关联。
  • 当用户的 total_amount > 1000 时,更新 users.vip_status 为 'gold'。

5. UPDATE 结合 CASE(条件更新)

sql 复制代码
UPDATE users
SET vip_status = 
    CASE 
        WHEN age > 50 THEN 'platinum'
        WHEN age BETWEEN 30 AND 50 THEN 'gold'
        ELSE 'silver'
    END;

AI生成项目sql
1234567

解释:

  • age > 50 → platinum
  • age 在 30-50 之间 → gold
  • 其他情况 → silver

6. UPDATE 结合 LIMIT

如果一次只想修改 部分数据:

sql 复制代码
UPDATE users SET status = 'inactive' ORDER BY id ASC LIMIT 10;

AI生成项目sql
1

解释:

  • 只更新 前 10 行 数据(按 id 升序排序)。
  • 适用于大表分批更新。

7. UPDATE 结合 ORDER BY

更新时,按特定顺序处理数据:

sql 复制代码
UPDATE users SET rank = rank + 1 ORDER BY age DESC;

AI生成项目sql
1

解释:

  • 按 age 从大到小更新 rank。

8. UPDATE 批量替换字段

(1) 替换部分字符串

sql 复制代码
UPDATE users
SET email = REPLACE(email, 'gmail.com', 'yahoo.com')
WHERE email LIKE '%gmail.com';

AI生成项目sql
123

解释:

  • 将 email 里的 gmail.com 替换为 yahoo.com。

(2) 拼接字符串

ini 复制代码
UPDATE users
SET username = CONCAT(username, '_new');

AI生成项目sql
12

解释:

  • 在 username 末尾加 _new。

9. UPDATE 事务控制

如果 UPDATE 可能影响多行数据,建议使用事务:

sql 复制代码
START TRANSACTION;
UPDATE users SET balance = balance - 100 WHERE id = 1;
UPDATE users SET balance = balance + 100 WHERE id = 2;
COMMIT;

AI生成项目sql
1234

如果失败,可回滚:

sql 复制代码
ROLLBACK;

AI生成项目sql
1

10. 防止 UPDATE 影响整个表

为了防止忘记 WHERE 语句 ,可以开启 safe updates:

ini 复制代码
SET SQL_SAFE_UPDATES = 1;

AI生成项目sql
1

如果更新时没加 WHERE,会报错:

sql 复制代码
ERROR 1175 (HY000): You are using safe update mode...

AI生成项目
1

关闭(仅当必要时):

ini 复制代码
SET SQL_SAFE_UPDATES = 0;

AI生成项目sql
1

总结

用法 说明 示例
更新单列 修改一个字段 UPDATE users SET age = 30 WHERE id = 1;
更新多列 同时修改多个字段 UPDATE users SET age = 30, city = 'Shanghai' WHERE id = 1;
批量更新 更新多个匹配行 UPDATE users SET status = 'inactive' WHERE age > 30;
UPDATE ... JOIN 关联更新 UPDATE users u JOIN orders o ON u.id = o.user_id SET u.vip_status = 'gold' WHERE o.total_amount > 1000;
UPDATE ... CASE 条件更新 UPDATE users SET vip_status = CASE WHEN age > 50 THEN 'platinum' ELSE 'silver' END;
UPDATE ... LIMIT 限制更新行数 UPDATE users SET status = 'inactive' ORDER BY id ASC LIMIT 10;
UPDATE ... REPLACE 替换字段内容 UPDATE users SET email = REPLACE(email, 'gmail.com', 'yahoo.com');

🚀 重点:

  1. 一定要加 WHERE,避免误更新所有数据!
  2. 批量更新大表时,分批更新 (LIMIT),避免锁表。
  3. 用 CASE 进行条件更新,提高灵活性。
  4. 涉及多个表时,用 JOIN 更新数据。
  5. 大规模更新前,先 SELECT 预览结果。

这样,你的 UPDATE 语句就能又快又安全!💡

相关推荐
明月_清风几秒前
数据平台到底是什么?一篇文章搞懂数据平台开发
大数据·后端·数据分析
心之语歌几秒前
DeerFlow Docker Desktop 部署教程
后端
美好世界几秒前
Codex 源码导读:第二部分——一次 Turn 的完整生命周期
后端
据说幸运很容易几秒前
接口测试框架重构:YAML 用例驱动 + 分层设计
后端·架构
海岳云舟几秒前
SpringCloudGateway 动态转发后端服务
后端
我的div丢了肿么办几秒前
自定义类型和类型别名以及实例化结构体的5种方式
后端·go
小满zs几秒前
Go语言第十三章(互斥锁,读写锁)
后端·go
IT_陈寒2 分钟前
JavaScript的this指向问题又让我加了个班
前端·人工智能·后端
美好世界2 分钟前
Codex 源码导读:第一部分——工程分层
后端
行百里er2 分钟前
Redis 核心数据结构(四)——Set 与 Sorted Set,去重与排名神器
redis·后端