UPDATE 更新数据
UPDATE 语句用于修改表中的现有数据。本章将详细介绍 UPDATE 语句的各种用法。
基本语法
sql
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;更新单行数据
sql
-- 更新用户年龄
UPDATE users
SET age = 26
WHERE id = 1;更新多个列
sql
-- 同时更新多个列
UPDATE users
SET age = 26, email = 'newemail@example.com'
WHERE id = 1;更新多行数据
sql
-- 更新所有北京的用户
UPDATE users
SET status = 'active'
WHERE city = '北京';使用计算更新
sql
-- 所有商品价格上涨 10%
UPDATE products
SET price = price * 1.1;
-- 年龄增加 1
UPDATE users
SET age = age + 1
WHERE id = 1;使用子查询更新
sql
-- 根据订单数量更新用户状态
UPDATE users
SET status = 'vip'
WHERE id IN (
SELECT user_id
FROM orders
GROUP BY user_id
HAVING COUNT(*) > 10
);使用 JOIN 更新
sql
-- 根据另一个表更新
UPDATE users u
JOIN orders o ON u.id = o.user_id
SET u.last_order_date = o.order_date
WHERE o.id = (
SELECT MAX(id) FROM orders WHERE user_id = u.id
);使用 CASE 更新
sql
-- 条件更新
UPDATE users
SET status = CASE
WHEN age < 18 THEN '未成年'
WHEN age < 60 THEN '成年'
ELSE '老年'
END;实战示例
更新用户资料
sql
UPDATE users
SET
name = '张三',
email = 'zhang@example.com',
updated_at = NOW()
WHERE id = 1;批量状态更新
sql
-- 激活最近登录的非活跃用户
UPDATE users
SET status = 'active'
WHERE status = 'inactive'
AND last_login > DATE_SUB(NOW(), INTERVAL 30 DAY);常见错误
错误 1:忘记 WHERE 子句
sql
-- 危险:会更新所有行!
UPDATE users SET age = 25;
-- 正确:使用 WHERE 子句
UPDATE users SET age = 25 WHERE id = 1;错误 2:安全更新模式
sql
-- 禁用安全更新模式(谨慎使用)
SET SQL_SAFE_UPDATES = 0;
-- 执行更新
UPDATE users SET age = 25 WHERE name = '张三';
-- 重新启用安全更新模式
SET SQL_SAFE_UPDATES = 1;最佳实践
- 始终使用 WHERE 子句
- 先用 SELECT 测试条件
- 重要更新使用事务
- 批量更新前备份数据
- 添加 updated_at 时间戳
性能优化
sql
-- 为 WHERE 列创建索引
CREATE INDEX idx_status ON users(status);
-- 使用 LIMIT 分批更新
UPDATE users
SET status = 'active'
WHERE status = 'inactive'
LIMIT 1000;小结
- UPDATE ... SET:修改数据
- WHERE 子句:指定要更新的行
- 多列更新:同时更新多个列
- 计算更新:在 SET 中使用表达式
- 子查询和 JOIN:复杂更新
下一步: 学习 DELETE 删除数据