MySQL 中的 UPDATE 语句详解

 更新时间:2025年05月20日 15:59:17   作者:BirdMan98  
UPDATE 语句用于修改表中的数据,可以更新单行或多行数据,下面给大家介绍MySQL 中的 UPDATE 语句,感兴趣的朋友一起看看吧

MySQL 中的 UPDATE 语句

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

1. UPDATE 语法

UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;

⚠ 注意

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

2. 基本 UPDATE

示例

(1) 更新单个字段

UPDATE users
SET age = 30
WHERE id = 1;

解释

id = 1age 更新为 30

(2) 更新多个字段

UPDATE users
SET age = 30, city = 'Shanghai'
WHERE id = 1;

解释

id = 1age 改为 30city 改为 'Shanghai'

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

UPDATE users SET status = 'inactive';

⚠ 危险

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

如何防止误操作?

先用 SELECT 检查更新范围

SELECT * FROM users WHERE status = 'active';

开启事务(如果支持)

START TRANSACTION;
UPDATE users SET status = 'inactive';
ROLLBACK;  -- 取消
COMMIT;    -- 确认更新

3. UPDATE 结合 WHERE 条件

(1) 使用 = 精确匹配

UPDATE users SET age = 25 WHERE name = 'Alice';

更新 name = 'Alice' 的用户的 age25

(2) 使用 ANDOR

UPDATE users
SET status = 'inactive'
WHERE age > 30 AND city = 'Beijing';

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

UPDATE users
SET status = 'inactive'
WHERE age > 50 OR city = 'Shanghai';

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

(3) 使用 IN

UPDATE users
SET vip_status = 'gold'
WHERE id IN (1, 2, 3, 5);

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

(4) 使用 BETWEEN

UPDATE users
SET level = 'senior'
WHERE age BETWEEN 30 AND 40;

更新 age30-40 之间的用户。

(5) 使用 LIKE

UPDATE users
SET department = 'Tech'
WHERE email LIKE '%@gmail.com';

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

4. UPDATE 结合 JOIN

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

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

解释

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

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

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

解释

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

6. UPDATE 结合 LIMIT

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

UPDATE users SET status = 'inactive' ORDER BY id ASC LIMIT 10;

解释

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

7. UPDATE 结合 ORDER BY

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

UPDATE users SET rank = rank + 1 ORDER BY age DESC;

解释

age 从大到小更新 rank

8. UPDATE 批量替换字段

(1) 替换部分字符串

UPDATE users
SET email = REPLACE(email, 'gmail.com', 'yahoo.com')
WHERE email LIKE '%gmail.com';

解释

email 里的 gmail.com 替换为 yahoo.com

(2) 拼接字符串

UPDATE users
SET username = CONCAT(username, '_new');

解释

username 末尾加 _new

9. UPDATE 事务控制

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

START TRANSACTION;
UPDATE users SET balance = balance - 100 WHERE id = 1;
UPDATE users SET balance = balance + 100 WHERE id = 2;
COMMIT;

如果失败,可回滚

ROLLBACK;

10. 防止 UPDATE 影响整个表

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

SET SQL_SAFE_UPDATES = 1;

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

ERROR 1175 (HY000): You are using safe update mode...

关闭(仅当必要时):

SET SQL_SAFE_UPDATES = 0;

总结

用法说明示例
更新单列修改一个字段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');

🚀 重点

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

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

到此这篇关于MySQL 中的 UPDATE 语句的文章就介绍到这了,更多相关mysql update语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql5.7.18版本免安装配置教程

    mysql5.7.18版本免安装配置教程

    这篇文章主要为大家详细介绍了mysql5.7.18版本免安装的配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • MySQL数据误删除的快速解决方法(MySQL闪回工具)

    MySQL数据误删除的快速解决方法(MySQL闪回工具)

    Binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是DBA和运维人员数据恢复好帮手,下面小编通过教程给大介绍MySQL数据误删除的快速解决方法,一起看看吧
    2019-10-10
  • 详解 Mysql查询结果顺序按 in() 中ID 的顺序排列

    详解 Mysql查询结果顺序按 in() 中ID 的顺序排列

    这篇文章主要介绍了详解 Mysql查询结果顺序按 in() 中ID 的顺序排列的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • MySQL表锁、行锁、排它锁及共享锁的使用详解

    MySQL表锁、行锁、排它锁及共享锁的使用详解

    随着应用对事务完整性和并发性要求的不断提高,MySQL才开始开发基于事务的存储引擎,下面这篇文章主要给大家介绍了关于MySQL表锁、行锁、排它锁及共享锁使用的相关资料,需要的朋友可以参考下
    2022-04-04
  • linux服务器清空MySQL的history历史记录 删除mysql操作记录

    linux服务器清空MySQL的history历史记录 删除mysql操作记录

    mysql历史记录上可能留下了很多敏感信息,比如密码什么的,需及时清空历史记录,下面分享一下inux服务器清空MySQL的history历史记录的方法
    2014-01-01
  • MySQL transaction事务安全示例讲解

    MySQL transaction事务安全示例讲解

    这篇文章主要为大家介绍了MySQL数据库事务安全transaction的示例讲解教程,事务就是将一组操作封装成一个执行单元,要么一块执行成功,要么一块失败,不存在部分执行成功的情况。事务保证了执行的稳定性,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-06-06
  • 怎样获取MySQL结果集的第一条记录

    怎样获取MySQL结果集的第一条记录

    这篇文章主要介绍了怎样获取MySQL结果集的第一条记录问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL联表查询基本操作之left-join常见的坑

    MySQL联表查询基本操作之left-join常见的坑

    这篇文章主要给大家介绍了关于MySQL联表查询基本操作之left-join的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • 微信昵称带符号导致插入MySQL数据库时出错的解决方案

    微信昵称带符号导致插入MySQL数据库时出错的解决方案

    Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节,所以会导致带有表情的昵称插入数据库时出错,下面给大家分享下解决方案,需要的朋友参考下吧
    2016-12-12
  • Mysql中新建用户及授权的方法分享

    Mysql中新建用户及授权的方法分享

    这篇文章给大家汇总介绍了Mysql中新建用户及授权的方法,首先介绍的是作者自己的项目经历,后面附上了参考文章,希望能对大家学习mysql有所帮助。
    2016-07-07

最新评论