目录
- mysql 中的 UPDATE 语句
- 1. UPDATE 语法
- 2. 基本 UPDATE
- 3. UPDATE 结合 WHERE 条件
- 4. UPDATE 结合 JOIN
- 5. UPDATE 结合 CASE(条件更新)
- 6. UPDATE 结合 LIMIT
- 7. UPDATE 结合 ORDER BY
- 8. UPDATE 批量替换字段
- 9. UPDATE 事务控制
- 10. 防止 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 = 1
的 age
更新为 30
。
(2) 更新多个字段
UPDATE users SET age = 30, city = 'Shanghai' WHERE id = 1;
解释:
id = 1
的 age
改为 30
,city
改为 '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'
的用户的 age
为 25
。
(2) 使用 AND
和 OR
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 > 50
或 city = '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;
更新 age
在 30-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 usejavascriptrs SET vip_status = CASE WHEN age > 50 THEN 'platinum' WHEN age BETWEEN 30 AND 50 THEN 'gold' ELSE 'silver' END;
解释:
age > 50
→platinum
age 在 30-50
之间 →gold
- 其他情况 →
silver
6. UPDATE 结合 LIMIT
如果一次只想修改 部分数据:
UPDATE users SET status = 'inactive' ORDER BY id ASC LIMIT 10;
解释:
- 只更新 前 10 行 数据(按
id
升序排序)。 - 适用于大表分批更新。
7. UPDATE 结合 http://www.devze.comORDER 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
语句就能又快又安全!
到此这篇关于MySQLjs 中的 UPDATE 语句的文章就介绍到这了,更多相关mysql update语句内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论