如何在mysql中更新数据_mysql update语句基础讲解

来源:这里教程网 时间:2026-02-28 20:49:51 作者:

在 MySQL 中更新数据,核心就是使用 UPDATE 语句。它能修改表中已存在的一行或多行记录,但必须配合 WHERE 条件使用,否则会误改整张表——这是新手最容易踩的坑。

UPDATE 语句基本语法结构

标准写法如下:

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

说明:

SET 后面跟的是“列 = 值”的赋值对,多个用英文逗号分隔 WHERE 是关键,用于定位要更新的行;没有 WHERE 就是全表更新,风险极高 条件支持比较运算符(=、!=、>、

安全更新前的三个习惯

避免误操作,建议养成以下操作习惯:

先用 SELECT 语句查出目标数据,确认 WHERE 条件是否准确。例如:
SELECT * FROM users WHERE id = 105;
在执行 UPDATE 前,开启事务(
START TRANSACTION;
),更新后用
SELECT
验证,没问题再
COMMIT;
,出错就
ROLLBACK;
生产环境尽量避免直接在命令行执行无备份的 UPDATE,优先走带审核的运维平台或脚本

常见更新场景示例

假设有一张

orders
表,含字段
id
status
amount
updated_at

更新单条订单状态:
UPDATE orders SET status = 'shipped' WHERE id = 2001;
批量更新多条(如所有待支付订单改为已取消):
UPDATE orders SET status = 'cancelled', updated_at = NOW() WHERE status = 'pending';
基于其他列计算更新:
UPDATE products SET price = price * 0.9 WHERE category = 'clearance';
(打九折)
用子查询更新(需注意 MySQL 版本限制):
UPDATE users SET city_id = (SELECT id FROM cities WHERE name = 'Beijing') WHERE city = 'Beijing';

容易忽略的关键细节

这些点不注意,可能让更新“看似成功”却没达到预期:

字符串值要用单引号包裹,数字不用,比如
SET name = 'Alice', age = 28
NULL 值要写成
NULL
(不加引号),不是
'NULL'
时间字段推荐用
NOW()
CURRENT_TIMESTAMP
,而不是手动拼日期字符串
如果 WHERE 条件没匹配到任何行,MySQL 会返回 “0 rows affected”,这不是错误,只是没更新成功

相关推荐